C++中的布爾類型和引用


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,三目運算符的可能返回都是變量時,返回的是引用;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM