1,C++ 中的布爾類型:
1,C++ 在 C 語言的基礎類型系統之上增加了 bool;
1,C 語言中,沒有 bool 類型存在,往往都是用整型代替 bool 類型,常用 0 表示假,用 1 表示真;
2,bool 本來就有這樣的類型,但是在 C 語言中卻沒有這樣的對應基本類型,所以只有使用整型代替 bool 類型,但是不嚴謹;
3,這也是 C++ 中的 “+” 的體現;
2,C++ 中的 bool 可能的值只有 true 和 false;
1,true 代表真值,編譯器內部用 1 來表示(但是會將非 0 值也轉換為 true 而變為 1 存儲);
2,false 代表非真值,編譯器內部用 0 來表示;
3,理論上 bool 只占用一個字節;
2,bool 類型只有 true(非 0)和 false(0)兩個值;
C++ 編譯器會將非 0 值轉換為 true,0 值轉換為 false;
1 bool b = 0; // 兼容 C,合法; 2 3 printf("b = %d\n", b); // b = 0; 4 5 b++; // 為了支持 C 語言,bool 類型支持數學運算; 6 7 printf("b = %d\n", b); // b = 1; 8 9 b = b - 3; 10 11 printf("b = %d\n", b); // b = 1;
3,布爾類型的使用變成實驗:
1,main.cpp 文件:
1 #include <stdio.h> 2 3 int main(int argc, char *argv[]) 4 { 5 bool b = false; 6 int a = b; 7 8 printf("sizeof(b) = %d\n", sizeof(b)); // 1; 9 printf("b = %d, a = %d\n", b, a); // 0,0; 10 11 b = 3; 12 a = b; 13 14 printf("b = %d, a = %d\n", b, a); // 1,1; 15 16 b = -5; 17 a = b; 18 19 printf("b = %d, a = %d\n", b, a); // 1,1; 20 21 a = 10; 22 b = a; 23 24 printf("a = %d, b = %d\n", a, b); // 10,1; 25 26 a = 0; 27 b = a; 28 29 printf("a = %d, b = %d\n", a, b); // 0,0; 30 31 return 0; 32 }
4,布爾類型是 C++ 中的基本數據類型:
1,可以定義 bool 類型的全局變量;
2,可以定義 bool 類型的常量;
3,可以定義 bool 類型的指針;
4,可以定義 bool 類型的數組;
5,...;
5,C++ 中的三目運算符(運算符當中被明顯升級的):
1,C++ 對三目運算符進行了升級:
1 int a = 1; 2 int b = 2; 3 4 (a < b ? a : b) = 3; // C 中三目運算符不能當做左值使用;error: lvalue(左值) required as left operand of assignment 5 6 // (a < b ? a : 2) = 3; // C++ 中報錯; error: lvalue(左值) required as left operand of assignment 7 8 printf("a = %d, b = %d\n", a, b); // C++ 中,a = 3,b = 2;
2,C 語言中的三目運算符返回的是變量值;
1,不能作為左值使用;
3,C++ 中的三目運算符可直接返回變量本身;
1,既可作為右值使用,又可作為左值使用;
4,三目運算符可能返回的值中如果有一個是常量值,則不能作為左值使用;
6,C++ 對三目運算符做了怎樣的升級?這種升級的意義是什么?
1,三目運算符如果可能的返回全部為變量,則它返回的是變量本身;
2,意味着引用;
7,C++ 中的引用:
1,變量名回顧:
1,變量是一段實際連續存儲空間的別名;
2,程序中通過變量來申請並命名存儲空間;
3,通過變量的名字可以使用存儲空間;
2,一段連續的存儲空間只能有一個別名嗎?
1,不一定,例如人的名字可以有多個;
3,在 C++ 中新增加了引用的概念:
1,代碼如下:
1 int a = 4; 2 int& b = a; // b 為 a 的別名; 3 4 b = 5; // 操作 b 就是操作 a;
2,引用可以看做一個已定義變量的別名;
1,可以引用無數個別名;
3,引用的語法:Type& name = var;
1,“&”標明標識符 name 是引用,是變量 var 別名;
2,name 的類型必須和 var 相同;
4,普通引用在定義時必須用同類型的變量進行初始化;
1,引用是別名,要給編譯器說明;
2,強類型;
8,引用初體驗實例分析:
1,main.cpp 文件:
1 #include <stdio.h> 2 3 int main(int argc, char *argv[]) 4 { 5 int a = 4; 6 int& b = a; 7 8 // float& b = a; // error: invalid initialization of reference of type 'float&' from expression of type 'int'; 9 10 // float& b; // error: 'b' declared as reference but not initalized; 11 12 // float& b = 1; // 1 就是 1,不需要別名,對 const 引用例外; 13 // error: invalid initialization of non-const(非常量) reference of type 'float&' from a temporary(暫時的) of type 'int'; 14 15 b = 5; 16 17 printf("a = %d\n", a); // a = 5; 18 printf("b = %d\n", b); // b = 5; 19 printf("&a = %p\n", &a); // &a = 0xbfe54aec; 20 printf("&b = %p\n", &b); // &b = 0xbfe54aec; 21 22 return 0; 23 }
9,C++ 對三目運算符做了什么?
1,代碼如下:
1 int a = 1; 2 int b = 2; 3 4 (a < b ? a : b) = 3; // 正確,返回 a 或 b 的引用,可作為左值; 5 (a < b ? 1 : b) = 4; // 錯誤,返回 1 或 b 的值,不能作為左值;
2,當三目運算符的可能返回值都是變量時,返回的是變量引用;
3,當三目運算符的可能返回中有常量時,返回的是值;
10,小結:
1,bool 類型是 C++ 新增加的基礎類型;
2,bool 類型的值只可能是 true 和 false;
3,C++ 中的引用可以看做變量的別名來使用(返回引用時);
4,C++ 中的三目運算符可以作為左值使用;
5,三目運算符的可能返回都是變量時,返回的是引用;