當使用C++做HTTP用戶端時,目前通用的做法就是使用libcurl。其官方網站的地址是http://curl.haxx.se/,該網站主要提供了Curl和libcurl。Curl是命令列工具,用於完成FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP的命令的請求及接收回饋。libcurl提供給開發人員,用於使用C++跨平台的開發各種網路通訊協定的請求及響應。裡面的文檔非常齊全,不過都是英文的。
為什麼中國的程式員不敢對C++標準委員會說不?我在CSDN上發了一個貼子,指出C++標準委員會制定標準強制for迴圈一致性的做法是不合理的。其實關於強制for迴圈一致性的討論一直是比較激烈的,以前我在國外一些郵件清單中常常見到這樣的話題,兩方面的意見基本持平,不分高下。我在做我自己的太極語言時發現了一個規則,根據這個規則平滑推理過來可以判斷出不應強制for迴圈一致性,我就在我的blog和貼子裡說了。可是沒想到竟然……我覺到我們中國程式員界有一種不正確的思維定勢,過於迷信C++標準委員會(不只C+
太極語言出世——比C++更好的語言(續)(一)先來說一些太極語言中的小技巧。[a;b;str]=[1;0;"taiji"];show([str;a;b;]);猜猜,能看懂這段代碼嗎?其實就是a=1;b=0;str="taiji";show(str);show(a);show(b);這也是太極語言程式碼群組合機制中的,太極語言程式碼群組合機制中有很多很好玩很有趣的,我慢慢說。int [a;b;c];這是int a;int b;int c;int * [pa;pb;pc];這是int *
論C++標準委員會制定的一條不合理的標準C++標準委員會不讓for後()中定義的變數在外邊用,我覺的非常不合理在我做的太極語言中是這樣設計的,()中的名字註冊進入首個含名字空間的母垣(垣的概念大家都知道了吧),中間如果經過了{}則要加序號標記。for()中定義的變數讓不讓在外邊用曾經是一個爭議挺大的問題.在太極語言中是這樣考慮的:單獨從for本身考慮兩方面的意見不好確定,把目光放向全域.就是看()中定義的變數是否要全地區可見.在太極語言中講究"做一件事情只要一句話",讓緊密關聯的代碼能寫在一句中
C++設計的一個缺陷,是否應該提交給C++標準委員會呢?——不必強制類普通成員函數在類體中聲明類普通成員函數非得在類中聲明了才能在外邊寫成員函數,C++為什麼非得設計成這樣呢?1.如果想增加一個函數,那麼同樣的函數頭要寫兩遍,這違反了資訊唯一原則。造成難於維護難於同步等問題。2.想在庫外為庫中的類增加成員函數在目前的這種設計下是不可能的。比如我想為MFC庫的CString類增加一個自訂的tostring()函數就做不到。我想應該這樣設計,類普通成員函數可以直接在外部定義,而不用在類中聲明比如CS
C++設計的又一個缺陷,是否應該提交給C++標準委員會呢?——建構函式與解構函式名稱不應該用類名如果用類名,那麼就是一個資訊冗餘class test{ test(); test(int,int,char *); test(...); ...}現在我要更改test為test2,就需要更改四個地方,維護困難。class test2{ test2(); test2(int,int,char *); test2(...);
“C++之父BS說林銳錯了”之原因前天發了一個貼子“C++之父BS說林銳錯了”C++之父的C++聖經《C++程式設計語言
很多時候,我希望能用一個變數方便的表示多種狀態.例如我有一個視窗類別,要表示此視窗是否具有系統功能表,最小化按鈕,最大化按鈕,協助按鈕,可能需要四個變數來記錄.bool hasSystemMenu;bool hasMinimize;bool hasMaximize;bool hasHelp;這樣要佔用更多的記憶體.雖然用位域可以節約記憶體,但操作不方便. DELPHI這點就做得不錯,用set of 關鍵字聲明一個集合類型資料.如下: TWindowButton =
C++之父BS說林銳錯了C++之父的C++聖經《C++程式設計語言 特別版》中說:大家不要聽某些人說判斷指標是否為空白用(p==NULL)或(p!=NULL)的格式,C++之父認為這樣寫是不好的,提倡直接寫(p)或(!p)的形式。林銳在國內程式員界也是大名鼎鼎的人物,有大作《高品質C++/C編程指南》,說判斷指標是否為空白要用(p==NULL)或(p!=NULL)的格式,別用(p)或(!p)的形式。那麼大家聽誰的呢?我認為是C++之父BS的正確。理由暫且不說,讀者可以自己想一下了。
.Net和Delphi都對Service進行了很好的封裝,但是用C++編寫Service還是一件很煩瑣的事情。先寫一些輔助類吧:// 管理Service的控制代碼class ServiceHandle {public: ServiceHandle(SC_HANDLE h) : h_(h) { if (!h_) throw SysError(); } ~ServiceHandle() { ::CloseServiceHandle(h_);
一直用emacs寫c++程式,有時候要在.cpp和.h檔案中切換,下面的代碼可以實現這個功能(綁定到了F11上),要使用的話添加到.emacs檔案中即可,鬱悶的是調試的時候,因為太久沒用Regex了,忘了"."符號有特殊的含義而沒有加轉義符,花了不少時間來查錯 :-( .另外也有.hpp結尾的C++源碼檔案(例如boost),有需要時可以修改;;定義在cpp檔案和.h檔案中切換的函數;;;###autoload(defun switch-source-file ()
以前用DELPHI和C#時,對DELPHI和C#文法中的屬性感到十分方便,在讀寫屬性時能自動調用屬性的get, set函數或代碼.但我最喜歡的C++中沒有屬性機制.不過C++提供了範型編程和操作符重載機制,足以讓一切變成可能. 假定要添加屬性的類是目標類,給C++添加屬性機制,我的想法是建立一個類,重載此類的 "=" 操作符,這樣給這個類賦值時,會調用此類的operator =
接上篇,時間不夠,寫得較亂我上一篇給C++添加屬性機制的文章中,讓屬性類得到目標類的類指標,我使用了一個INIT_PROPERTY宏,在前幾天和龍子龍孫聊天時,他告訴了我一個技巧,得到類成員在類中的位移地址,如下(int)(&((type_name*)NULL)->member_name) 例如我有個類 Aclass A{public: virtual int show() {} int i1, i2;};則 (int)(&((A*)NULL)->i2)
網友“圖靈評論”的一篇“C++失去競爭力了嗎?《C/C++ User's
class Parent {public: virtual void foo(int i=0) { cout << "Parent::foo() " << i << endl; }};class Son : public Parent {public: virtual void foo() { cout << "Son::foo()" << endl;
學習C#中……今天發現,C#居然不支援在函數體內聲明static變數,這真的是很古怪,難道一個static變數的就一定要讓別人知道嗎(至少會被類的其他成員知曉)?下邊的C#和C++的比較,很明顯,C++在這一點上要合理很多,uniqueID這個不斷遞增、控制著唯一ID的重要變數,永遠不會被類裡的其他成員無意破壞掉,不知道為什麼C#不允許這種“函數體內部的static變數“,狂汗……//這是C#代碼,uniqueID_只能是類的靜態成員//而不能是Foo()函數的函數體內靜態成員class
下面是部分C字串操作函數的實現,或許在某些筆試時可以用到!#ifndef NULL#define NULL ((void *)0)#endif/*memcpy的實現代碼*/void* memcpy(void *pDst, void *pSrc, int iLen){char *pTmp = (char *)pDst;char *pTmp2 = (char *)pSrc;if(0 == iLen)return pDst;while(iLen--)*pTmp++ = *pTmp2++;return
1. class和struct的區別class和struct的用法沒什麼區別,只是class預設的成員變數是private,而struct預設是public。2. printf列印一個string時不要忘記使用%s看代碼便知:int main(){ char string[] = “Hello c programmers %dd”; printf(string); return 0;}3.
#include<iostream>using namespace std;template<typename T>struct Iter{typedef T value_type;T* ptr;Iter(T* p=0):ptr(p){}T& operator*() const {return *ptr;}};template<class I>typename I::value_type //這一整行是func的傳回型別func(I
mutable是一個好玩的C++關鍵字,也是我第一次遇到。於是查了查msdn,結果發現果然是好玩的關鍵字。首先,它只能修飾非const,非static的類資料成員。其次,它用來突破const函數。再次,它就這麼一個功能。class X{public:// 在邏輯上GetFlag只是擷取我的m_flag狀態,所以修飾為const// 但是,我需要知道其中一些動態狀態,所以mutable就誕生// 了,而且專門為此而誕生。bool GetFlag()