第I部分 C++基礎(chǔ)
- cin和cout的箭頭方向cin指向變量潮瓶,輸出指向cout
- /*和*/采用就近匹配原則饵隙,因此其中間不允許嵌套
- cerr:一個(gè)ostream對(duì)象躏鱼,關(guān)聯(lián)到標(biāo)準(zhǔn)錯(cuò)誤杆煞,通常寫入與標(biāo)準(zhǔn)輸出相同的設(shè)備爹橱。默認(rèn)情況下,寫到cerr的數(shù)據(jù)是不緩沖的纵搁。cerr通常用于輸出錯(cuò)誤信息或其他不屬于正常邏輯的輸出內(nèi)容吃衅。
- clog 一個(gè)ostream對(duì)象,關(guān)聯(lián)到標(biāo)準(zhǔn)錯(cuò)誤腾誉。默認(rèn)情況下徘层,寫到clog的數(shù)據(jù)是被緩沖的。clog通常用于報(bào)告程序的執(zhí)行信息利职,存入一個(gè)日志文件中趣效。
- C++語(yǔ)言規(guī)定一個(gè)int至少和一個(gè)shor一樣大,一個(gè)long至少和一個(gè)int一樣大猪贪,一個(gè)long long至少和一個(gè)long一樣大跷敬。其中,數(shù)據(jù)類型long long是在C++ 11新定義的热押。
- 在一個(gè)算術(shù)表達(dá)式中使用布爾變量西傀,則其結(jié)果是0或1。
- 不要混用帶符號(hào)類型與無符號(hào)類型桶癣,帶符號(hào)數(shù)會(huì)自動(dòng)轉(zhuǎn)化成為無符號(hào)數(shù)拥褂。
- C++規(guī)定的轉(zhuǎn)義字符包括
\n換行 \t橫向制表符 \a報(bào)警(響鈴)符 \v縱向制表符 \b退格符 \"雙引號(hào) \\ 反斜杠 \?問號(hào) \'單引號(hào) \\反斜杠 \r 回車符 \f進(jìn)紙符
- 指定字面值類型:
前綴:u 表示unicode 16字符 char16_t,U表示unicode 32字符 char_32_t鬼廓,L表示寬字符 wchar_t肿仑, u8表示UTF-8(僅用于字符串字面常量) char
整型字面后綴:u or U表示unsigned,l or L表示long碎税,ll or LL表示long long
浮點(diǎn)型字面值:f or F 表示float尤慰, l or L表示 long double
- 指針聲明*和引用聲明&都只針對(duì)單個(gè)變量。對(duì)復(fù)合指針引用雷蹂,最簡(jiǎn)單的辦法是從右向左閱讀伟端。
int * &r = p;
表示r是對(duì)指針p的引用。 - const限定是防止通過該值修改變量匪煌。頂層const是針對(duì)值本身的限定责蝠,底層是針對(duì)值指向?qū)ο蟮南薅ā?/li>
- 默認(rèn)情況下党巾,const僅在文件內(nèi)有效,例如
const int bufSize = 512;
(類似于宏)霜医。多文件共享需要使用extern齿拂。 - 指針類型不匹配會(huì)報(bào)錯(cuò),而引用類型不匹配則會(huì)自動(dòng)轉(zhuǎn)化肴敛,臨時(shí)值引用署海。
int i = 0;
double *p = &i; //錯(cuò)誤
double dval = 3.14;
const int &ri = dval; //正確,綁定到了一個(gè)轉(zhuǎn)化過的臨時(shí)量上
- constexpr僅對(duì)指針有效医男,與指針?biāo)笇?duì)象無關(guān)砸狞。constexpr把指針對(duì)象設(shè)置成了頂層指針:
const int *p = nullptr; //p是一個(gè)指向整數(shù)常量的指針
constexpr int *q = nullptr; //q是一個(gè)指向整數(shù)的常量指針
- typedef遇到復(fù)雜場(chǎng)景,不能直接替換成原來的樣子來理解镀梭,而是將其對(duì)應(yīng)復(fù)雜指針定義為了頂層const指針刀森。
typedef char *pstring;
const pstring cstr = 0; // cstr是指向char的常量指針
const pstring *ps; // ps是一個(gè)指針,它的對(duì)象是指向char的常量指針报账。
const char *cstr = 0; // 是對(duì)const pstring cstr的錯(cuò)誤理解研底。不能直接替換展開。此處cstr是真想char常量的指針
16 auto在同一條定義語(yǔ)句中必須指向相同的數(shù)據(jù)類型透罢。auto引用可保留底層const飘哨,無法保留頂層const
auto i = 0, *p = &i; //正確
auto sz = 0, pi = 3.14; //錯(cuò)誤
auto &h = 42; //不能為非常量引用綁定字面值
- 解引用對(duì)象是左值琐凭,因此decltype(解引用對(duì)象)是引用。decltype表達(dá)式如果是雙引號(hào)浊服,結(jié)果也將是引用统屈。
int i = 42, *p = &i;
decltype(r + 0) b; //正確,加法結(jié)果是int牙躺,因此b是一個(gè)未初始化的int
decltype(*p) c; //錯(cuò)誤愁憔,c是int&,必須初始化
decltype((i)) d; // 錯(cuò)誤孽拷,d是int&吨掌,必須初始化
decltype(i) e; //正確,e是一個(gè)未初始化的int