C++

volatile

變量如果加了 volatile 修飾奢讨,則會從內存重新裝載內容稚叹,而不是直接從寄存器拷貝內

重載運算符

  1. 一般情況下,單目運算符最好重載為類的成員函數(shù);雙目運算符則最好重載為類的友元函數(shù)扒袖。
  2. 以下一些雙目運算符不能重載為類的友元函數(shù):=塞茅、()、[]僚稿、->凡桥。
  3. 類型轉換函數(shù)只能定義為一個類的成員函數(shù)而不能定義為類的友元函數(shù)。
  4. 若一個運算符的操作需要修改對象的狀態(tài)蚀同,選擇重載為成員函數(shù)較好缅刽。
  5. 若運算符所需的操作數(shù)(尤其是第一個操作數(shù))希望有隱式類型轉換,則只能選用友元函數(shù)蠢络。
  6. 當運算符函數(shù)是一個成員函數(shù)時衰猛,最左邊的操作數(shù)(或者只有最左邊的操作數(shù))必須是運算符類的一 個類對象(或者是對該類對象的引用)。如果左邊的操作數(shù)必須是一個不同類的對象刹孔,或者是一個內部 類型的對象啡省,該運算符函數(shù)必須作為一個友元函數(shù)來實現(xiàn)。
  7. 當需要重載運算符具有可交換性時髓霞,選擇重載為友元函數(shù)卦睹。

static關鍵字

static關鍵字的使用
靜態(tài)局部變量:作用域在聲明它的這個函數(shù)中,只會被初始化一次方库。

普通全局變量:在本文件內可以被無限制地使用结序。而且其他的源文件中,也可以通過extern關鍵字引用后使用纵潦。

靜態(tài)全局變量:在普通全局的基礎上取消了extern關鍵字的引用徐鹤,即無論怎么樣,只能給本文件的程序使用邀层,其他文件不能使用返敬。(保護代碼模塊化,封閉外部接口)寥院。

靜態(tài)成員變量在類中先做引用聲明劲赠,再做定義性說明。

c++ socket編程

c++ socket編程

初始化和賦值要注意區(qū)分

protected:受保護的成員對于派生類的成員和友元來說是可訪問的只磷,而private基類成員對于派生類成員和友元是不能訪問的

“malloc在堆上分配的內存塊经磅,使用free釋放內存,而new所申請的內存則是在自由存儲區(qū)上钮追,使用delete來釋放“⒙酰”

C++中字符串常量為了兼容C 可以賦值給char*類型

size_t

size_t:適當?shù)厥褂胹ize_t還會使你的代碼變得如同自帶文檔元媚。當你看到一個對象聲明為size_t類型,你馬上就知道它代表字節(jié)大小或數(shù)組索引,而不是錯誤代碼或者是一個普通的算術值

size_t是一些C/C++標準在stddef.h中定義的刊棕。這個類型足以用來表示對象的大小炭晒。
size_t的真實類型與操作系統(tǒng)有關,在32位架構中被普遍定義為:

typedef   unsigned int size_t;

而在64位架構中被定義為:

typedef  unsigned long size_t;

size_t在32位架構上是4字節(jié)甥角,在64位架構上是8字節(jié)网严,在不同架構上進行編譯時需要注意這個問題。
而int在不同架構下都是4字節(jié)嗤无,與size_t不同震束;且int為帶符號數(shù),size_t為無符號數(shù)当犯。

Const成員函數(shù)

普通對象可以調用const成員函數(shù)垢村,而const對象可以不能調用非const成員函數(shù)(const對象必須有專供的函數(shù))。
const函數(shù)的使用與分析

在早期某些編譯器會將C++代碼翻譯為C代碼嚎卫,然后使用C編譯器生成可執(zhí)行文件嘉栓。其中翻譯的一個轉化就是:將this指針顯式添加到成員函數(shù)的第一個參數(shù)位置上,并在成員函數(shù)調用時拓诸,自動將對象的地址傳遞給參數(shù)this侵佃。

//原型轉換為C代碼后的樣子
void bark(const Dog*this);
void feed(Dog*this,unsigned add);

//調用時的轉換
dog.feed(2);   ----->  feed(&dog , 2); 
dog.bark();    ----->  bark(&dog);

當然實際編譯器不會是這么工作的,這只是幫助理解代碼運作的一種方式奠支。

const關鍵字

指向常量的指針(pointer to const)只能保證不通過這個指針來改變所指向的地址的內容馋辈。

無論是對常量的引用(reference to const)還是指向常量的指針(pointer to const)都是他們的一廂情愿覺得自己指向了一個常量,而不去修改它胚宦。
常量指針(const pointer)只能保證指針本身不會被改變首有,而指向的值是否變化就不得而知了。

new與delete

C++標準規(guī)定:delete空指針是合法的枢劝,沒有副作用井联。

所以我們在Delete指針后賦值為NULL或0是個好習慣。對一個非空指針delete后您旁,若沒有賦NULL烙常,若再次delete的話,就回指向一個不可訪問的空間.

namespace

只在cpp文件中使用namespace鹤盒,不要在頭文件中使用蚕脏。

容器

向一個vector、string或deque插入元素會使所有指向容器的迭代器侦锯、引用和指針失效驼鞭。
因為不同容器使用不同的策略來分配元素空間,在vector或string尾部以外尺碰、deque首尾之外的位置插入會引起整個對象的存儲空間的重新分配挣棕。

nullptr译隘,0,NULL

整數(shù)用 0, 實數(shù)用 0.0, 指針用 nullptr 或 NULL, 字符 (串) 用 '\0'.

整數(shù)用 0, 實數(shù)用 0.0, 這一點是毫無爭議的.

對于指針 (地址值), 到底是用 0, NULL 還是 nullptr. C++11 項目用 nullptr; C++03 項目則用 NULL, 畢竟它看起來像指針洛心。實際上固耘,一些 C++ 編譯器對 NULL 的定義比較特殊,可以輸出有用的警告词身,特別是 sizeof(NULL) 就和 sizeof(0) 不一樣厅目。

字符 (串) 用 '\0', 不僅類型正確而且可讀性好.

編碼

ASCII顯示中文是用的多字節(jié)編碼,用多個字節(jié)來表示中文法严;UNICODE兩個字節(jié)一個字符號损敷。

輸出參數(shù)和返回值

out prameter:當函數(shù)內部不需要做創(chuàng)建操作的時候使用
return value:當函數(shù)內部需要創(chuàng)建時使用,注意內存管理 #TODO:考慮智能指針是否可以做函數(shù)內創(chuàng)建對象的內存管理

C++在new時的初始化的規(guī)律可能為:對于有構造函數(shù)的類渐夸,不論有沒有括號嗤锉,都用構造函數(shù)進行初始化;如果沒有構造函數(shù)墓塌,則不加括號的new只分配內存空間瘟忱,不進行內存的初始化,而加了括號的new會在分配內存的同時初始化為0

范圍for (range for statement)

for (declaration : expression)
    statement

若要改變容器內的數(shù)據(jù)苫幢,需要使用引用for(auto &i : v)
范圍for等價于

for (auto beg = v.begin(), end = v.end() ; beg != end; ++beg) {
    auto &r = *beg;
    r *= 2;
}

mutable 關鍵字

const意思是“這個函數(shù)不修改對象內部狀態(tài)”访诱。為了保證這一點,編譯器也會主動替你檢查韩肝,確保你沒有修改對象成員變量——否則內部狀態(tài)就變了触菜。
mutable意思是“這個成員變量不算對象內部狀態(tài)”。
比如哀峻,你搞了個變量涡相,用來統(tǒng)計某個對象的訪問次數(shù)(比如供debug用)。它變成什么顯然并不影響對象功用剩蟀,但編譯器并不知道:它仍然會阻止一個聲明為const的函數(shù)修改這個變量催蝗。把這個計數(shù)變量聲明為mutable,編譯器就明白了:這個變量不算對象內部狀態(tài)育特,修改它并不影響const語義丙号,所以就不需要禁止const函數(shù)修改它了。
作者:invalid s
鏈接:https://www.zhihu.com/question/64969053/answer/226142449
來源:知乎

lambda捕獲列表

  1. 沒有使用任何函數(shù)對象參數(shù)缰冤。
  2. = 函數(shù)體內可以使用Lambda所在作用范圍內所有可見的局部變量(包括Lambda所在類的this)犬缨,并且是值傳遞方式(相當于編譯器自動為我們按值傳遞了所有局部變量)。
  3. & 函數(shù)體內可以使用Lambda所在作用范圍內所有可見的局部變量(包括Lambda所在類的this)棉浸,并且是引用傳遞方式(相當于編譯器自動為我們按引用傳遞了所有局部變量)怀薛。
  4. this 函數(shù)體內可以使用Lambda所在類中的成員變量。
  5. a 將a按值進行傳遞迷郑。按值進行傳遞時乾戏,函數(shù)體內不能修改傳遞進來的a的拷貝迂苛,因為默認情況下函數(shù)是const的三热。要修改傳遞進來的a的拷貝鼓择,可以添加mutable修飾符。
  6. &a 將a按引用進行傳遞就漾。
  7. a, &b 將a按值進行傳遞呐能,b按引用進行傳遞弟断。
  8. =, &a, &b 除a和b按引用進行傳遞外良拼,其他參數(shù)都按值進行傳遞坤学。
  9. &,a, b 除a和b按值進行傳遞外米间,其他參數(shù)都按引用進行傳遞刨摩。

判斷平臺

https://stackoverflow.com/questions/5919996/how-to-detect-reliably-mac-os-x-ios-linux-windows-in-c-preprocessor

#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
   //define something for Windows (32-bit and 64-bit, this part is common)
   #ifdef _WIN64
      //define something for Windows (64-bit only)
   #else
      //define something for Windows (32-bit only)
   #endif
#elif __APPLE__
    #include <TargetConditionals.h>
    #if TARGET_IPHONE_SIMULATOR
         // iOS Simulator
    #elif TARGET_OS_IPHONE
        // iOS device
    #elif TARGET_OS_MAC
        // Other kinds of Mac OS
    #else
    #   error "Unknown Apple platform"
    #endif
#elif __linux__
    // linux
#elif __unix__ // all unices not caught above
    // Unix
#elif defined(_POSIX_VERSION)
    // POSIX
#else
#   error "Unknown compiler"
#endif

dll

導出類的時候最好用純虛接口的模式痹兜;dll 接口最好不要把stl或者模板容器傳來傳去的再登。

動態(tài)庫中的全局變量方篮,在被其他進程使用時有缆,會拷貝一份象踊,所以多個進程使用同一個動態(tài)庫中的全局變量也不會相互影響。也不會改變動態(tài)庫中該變量的值棚壁。類似于fork的COW技術

如果某動態(tài)庫中有一個全局變量杯矩,程序a使用的這個動態(tài)庫,程序b也使用了這個動態(tài)庫袖外,那么程序a和b中的全局變量是一個嗎史隆?也就是說,進程間使用動態(tài)庫時曼验,共享全局變量嗎泌射?答題是:是一個,共享鬓照,但寫時拷貝熔酷,給程序員的感覺是:不共享。

https://blog.csdn.net/frank_jb/article/details/90483206

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末颖杏,一起剝皮案震驚了整個濱河市纯陨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌留储,老刑警劉巖翼抠,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異获讳,居然都是意外死亡阴颖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門丐膝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來量愧,“玉大人钾菊,你說我怎么就攤上這事≠怂啵” “怎么了煞烫?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長累颂。 經常有香客問我滞详,道長,這世上最難降的妖魔是什么紊馏? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任料饥,我火速辦了婚禮,結果婚禮上朱监,老公的妹妹穿的比我還像新娘岸啡。我一直安慰自己,他們只是感情好赫编,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布巡蘸。 她就那樣靜靜地躺著,像睡著了一般沛慢。 火紅的嫁衣襯著肌膚如雪赡若。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天团甲,我揣著相機與錄音逾冬,去河邊找鬼。 笑死躺苦,一個胖子當著我的面吹牛身腻,可吹牛的內容都是我干的。 我是一名探鬼主播匹厘,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嘀趟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愈诚?” 一聲冷哼從身側響起她按,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炕柔,沒想到半個月后酌泰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡匕累,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年陵刹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欢嘿。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡衰琐,死狀恐怖也糊,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情羡宙,我是刑警寧澤狸剃,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站辛辨,受9級特大地震影響捕捂,放射性物質發(fā)生泄漏。R本人自食惡果不足惜斗搞,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慷妙。 院中可真熱鬧僻焚,春花似錦、人聲如沸膝擂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽架馋。三九已至狞山,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叉寂,已是汗流浹背萍启。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屏鳍,地道東北人勘纯。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像钓瞭,于是被迫代替她去往敵國和親驳遵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,517評論 1 51
  • C++運算符重載-下篇 本章內容:1. 運算符重載的概述2. 重載算術運算符3. 重載按位運算符和二元邏輯運算符4...
    Haley_2013閱讀 1,440評論 0 49
  • 重新系統(tǒng)學習下C++山涡;但是還是少了好多知識點堤结;socket;unix鸭丛;stl竞穷;boost等; C++ 教程 | 菜...
    kakukeme閱讀 19,892評論 0 50
  • 不確定你在不在,不確定你來不來穿挨,不確定這就是你月弛。 你肴盏,就如君子的禮節(jié),看似大方得體帽衙,卻不像是現(xiàn)實的菜皂。 你,就如天邊...
    IggyTheDog閱讀 179評論 0 0
  • 雨落123閱讀 239評論 0 0