switch 內(nèi)部變量定義
不允許跨過變量的初始化語句直接跳轉(zhuǎn)到該變量作用域內(nèi)另外一個位置。
int cnt = 1;
switch (cnt) {
case 0:
int j;
break;
case 1:
j = 3;
break;
}
// OK
int cnt = 1;
switch (cnt) {
case 0:
int j = 0;
break;
case 1:
j = 3;
break;
}
//crosses initialization of 'int j'
int cnt = 1;
switch (cnt) {
case 0:
string fileName;
break;
case 1:
cout << fileName << endl;
break;
}
// ?
- goto 語句
goto end;
int cnt = 1;
end :
cnt = 10;
//crosses initialization of 'int cnt'
begin :
int cnt = 200 - rand();
if (cnt > 0) {
goto begin;
}
cout << cnt << endl;
// OK
初始化
如果內(nèi)置類型未被顯示初始化,則它的值由定義的位置決定:
定義于任何函數(shù)之外的變量被初始化為0
-
定義在函數(shù)體內(nèi)部的內(nèi)置類型將不被初始化,不被初始化的內(nèi)置類型變量的值是未定義的
int g_i; int main() { int i; int cnt = 1; cout << "g_i = " << g_i << endl; cout << "i = " << i << endl; return 0; } //g_i = 0 //i = 16 各個類各自決定其初始化對象的方式
聲明vs定義
extern double pi = 3.141592654; //定義
邏輯表達(dá)式
-
運(yùn)算優(yōu)先級
- 邏輯OR、邏輯AND的優(yōu)先級低于關(guān)系運(yùn)算符
- 邏輯AND的優(yōu)先級高于邏輯OR
- !運(yùn)算符的優(yōu)先級高于所有的關(guān)系運(yùn)算符、算術(shù)運(yùn)算符
-
順序點(diǎn)
變量修改的最晚實(shí)現(xiàn)時刻。
這個點(diǎn)上,之前所有的賦值所產(chǎn)生的副作用都已發(fā)生完成,并且在其后的賦值不能在該點(diǎn)產(chǎn)生任何副作用。在順序點(diǎn)之間則沒有任何保證。(運(yùn)算符左邊的子表達(dá)式先于右邊的子表達(dá)式)
- 分號;
- 未重載的逗號運(yùn)算符的左操作數(shù)賦值之后(即“,”處)
- 未重載的”||”運(yùn)算符的左操作數(shù)賦值之后(即“||”處)
- 未重載的“&&”運(yùn)算符的左操作數(shù)賦值之后(即"&&"處)
- 三元運(yùn)算符“? : ”的左操作數(shù)賦值之后(即“?”處)
- 在函數(shù)所有參數(shù)賦值之后但在函數(shù)第一條語句執(zhí)行之前
- 在函數(shù)返回值已拷貝給調(diào)用者之后但在該函數(shù)之外的代碼執(zhí)行之前
- 每個基類和成員初始化之后
在標(biāo)準(zhǔn)中規(guī)定:在兩個順序點(diǎn)之間,一個數(shù)值對象最多只能由表達(dá)式賦值修改一次。而對于其他的行為不給予明確定義。
int i = 3; int k=(++i)+(++i)+(++i);//各個編譯器處理方法不同, gcc:16, 18(vc)
-
邏輯運(yùn)算符的另一種表示
and、or、not:C++中的保留字;不是C語言的保留字(include頭文件iso646.h,可將它們用作運(yùn)算符)
運(yùn)算符 另一種表示 && and
| || | or |
| ! | not |
參考: C/C++順序點(diǎn)
字符函數(shù)庫cctype
include <cctype>
| 函數(shù)名 | 返回值 |
|---|---|
| isalnum() | 如果參數(shù)是字母or數(shù)字,返回true |
| isalpha() | 如果參數(shù)是字母,返回true |
| iscntrl() | 如果參數(shù)是控制字符,返回true |
| isdigit() | 如果參數(shù)是數(shù)字(0-9),返回true |
| isgraph() | 如果參數(shù)是除空格之外的打印字符,返回true |
| islower() | 如果參數(shù)是小寫字母,返回true |
| isprint() | 如果參數(shù)是打印字符(包括空格),返回true |
| ispunct() | 如果參數(shù)是標(biāo)點(diǎn)符號,返回true |
| isspace() | 如果參數(shù)是標(biāo)準(zhǔn)空白字符,返回true |
| isupper() | 如果參數(shù)是大寫字母,返回true |
| isxdigit() | 如果參數(shù)是十六進(jìn)制數(shù),即0-9、a-f、A-F,返回true |
| tolower() | 如果參數(shù)是大寫字符,則返回其小寫,否則返回該參數(shù) |
| toupper() | 如果參數(shù)是小寫字符,則返回其大寫,否則返回該參數(shù) |