1、布爾類型
C++中的布爾類型
注意:
true
代表真值,編譯器內部用1來表示
false
代表非真值, 編譯器內部用0來表示
C語言中:
用整型值來代替bool
類型,常用0:flase, 1:true
C++做了類型增強,增加了一個非常嚴謹的bool
類型,true
和false
作為關鍵字存在。
在C++的布爾類型中,bool
類型只有true
和false
兩個值,C++編譯器會將非0值轉換為true
, 0值轉換為false
。
bool b = 0;printf("b = %d\n", b);b++;printf("b = %d\n", b);b = b - 3;printf("b = %d\n", b);// bool類型是否支援數學運算?
其實在C++語言中,布爾類型的內部實現是用一個位元組的整型來實現的,
bool
類型支援數學運算,編譯器會在內部進行調整,非0為true,0 為 false
代碼實驗:
#include <stdio.h>int main(int argc, char *argv[]){ bool b = false; int a = b; printf("sizeof(b) = %d\n", sizeof(b)); // sizeof(b) = 1, bool類型佔一個位元組 printf("b = %d, a = %d\n", b, a); 0 // b = 0, a = 0 b = 3; // b = 1 a = b; // a = 1 printf("b = %d, a = %d\n", b, a); b = -5; // b = 1 a = b; // a = 1 printf("b = %d, a = %d\n", b, a); a = 10; // a = 10 b = a; // b = 1 printf("a = %d, b = %d\n", a, b); a = 0; // a = 0 b = a; // b = 0 printf("a = %d, b = %d\n", a, b); return 0;}
布爾類型是C++中的基礎資料型別 (Elementary Data Type)
可以定義bool
類型的全域變數
可以定義bool
類型的常量
可以定義bool
類型的指標
可以定義bool
類型的數組
......
2、三目運算子
C++中對三目運算子進行了升級
考慮下列代碼是否正確,分別在C語言和C++環境中編譯運行實驗
int a = 1;int b =2;(a < b ? a : b) = 3;printf("a = %d, b = %d\n", a, b);// 在C語言中報錯// 在C++中,結果a = 3
三目運算子
C語言中的三目運算子返回的是變數值
C++中的三目運算子可以直接返回變數本身
注意:
三目運算子可能返回的值中如果有一個是常量值,則不能作為左值使用
三目運算子只有在所有的可能返回都是變數的時候才能作為左值使用,一個常量一個變數就不能作為左值使用
C++對三目運算子進行了這樣的升級,意義何在?
三目運算子所有的可能返回都是變數的時候,返回的就是變數本身,由此引出了新概念:引用
3、引用
3.1 變數名
變數是一段實際連續儲存空間的別名,程式中通過變數來申請並命名儲存空間,通過變數的名字可以使用儲存空間。
問題:一段連續的儲存空間只能有一個別名嗎?
3.2 引用
C++中的引用
注意:
普通引用在定義時必須用同類型的變數進行初始化。
4、小結
bool
類型是C++新增加的基礎類型
bool
類型的值只能是true
和false
C++中的三目運算子可作為左值使用
C++中的引用可以看作變數的別名來使用
三目運算子的可能返回都是變數時,返回的是引用