1漫试、布爾類(lèi)型
C++中的布爾類(lèi)型
- C++在C語(yǔ)言的基本類(lèi)型系統(tǒng)之上增加了
bool
- C++中的
bool
可取的值只有true
和false
- 理論上
bool
之占用一個(gè)字節(jié)注意:
true
代表真值糯景,編譯器內(nèi)部用1來(lái)表示
false
代表非真值嘲恍, 編譯器內(nèi)部用0來(lái)表示
C語(yǔ)言中:
用整型值來(lái)代替
bool
類(lèi)型胀滚,常用0:flase, 1:true
C++做了類(lèi)型增強(qiáng),增加了一個(gè)非常嚴(yán)謹(jǐn)?shù)?code>bool類(lèi)型谷遂,true
和false
作為關(guān)鍵字存在垫言。
在C++的布爾類(lèi)型中粘昨,bool
類(lèi)型只有true
和false
兩個(gè)值壹哺,C++編譯器會(huì)將非0值轉(zhuǎn)換為true
抄伍, 0值轉(zhuǎn)換為false
。
bool b = 0;
printf("b = %d\n", b);
b++;
printf("b = %d\n", b);
b = b - 3;
printf("b = %d\n", b);
// bool類(lèi)型是否支持?jǐn)?shù)學(xué)運(yùn)算管宵?
其實(shí)在C++語(yǔ)言中截珍,布爾類(lèi)型的內(nèi)部實(shí)現(xiàn)是用一個(gè)字節(jié)的整型來(lái)實(shí)現(xiàn)的,
bool
類(lèi)型支持?jǐn)?shù)學(xué)運(yùn)算箩朴,編譯器會(huì)在內(nèi)部進(jìn)行調(diào)整岗喉,非0為true,0 為 false
代碼試驗(yàn):
#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類(lèi)型占一個(gè)字節(jié)
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;
}
布爾類(lèi)型是C++中的基本數(shù)據(jù)類(lèi)型
可以定義
bool
類(lèi)型的全局變量可以定義
bool
類(lèi)型的常量可以定義
bool
類(lèi)型的指針可以定義
bool
類(lèi)型的數(shù)組......
2炸庞、三目運(yùn)算符
C++中對(duì)三目運(yùn)算符進(jìn)行了升級(jí)
考慮下列代碼是否正確钱床,分別在C語(yǔ)言和C++環(huán)境中編譯運(yùn)行試驗(yàn)
int a = 1;
int b =2;
(a < b ? a : b) = 3;
printf("a = %d, b = %d\n", a, b);
// 在C語(yǔ)言中報(bào)錯(cuò)
// 在C++中,結(jié)果a = 3
三目運(yùn)算符
- C語(yǔ)言中的三目運(yùn)算符返回的是變量值
- 不能作為左值使用
- C++中的三目運(yùn)算符可以直接返回變量本身
- 既可以作為右值使用埠居,又可以作為左值使用
注意:
三目運(yùn)算符可能返回的值中如果有一個(gè)是常量值查牌,則不能作為左值使用
三目運(yùn)算符只有在所有的可能返回都是變量的時(shí)候才能作為左值使用,一個(gè)常量一個(gè)變量就不能作為左值使用
C++對(duì)三目運(yùn)算符進(jìn)行了這樣的升級(jí)滥壕,意義何在纸颜?
三目運(yùn)算符所有的可能返回都是變量的時(shí)候,返回的就是變量本身绎橘,由此引出了新概念:引用
3懂衩、引用
3.1 變量名
變量是一段實(shí)際連續(xù)存儲(chǔ)空間的別名,程序中通過(guò)變量來(lái)申請(qǐng)并命名存儲(chǔ)空間金踪,通過(guò)變量的名字可以使用存儲(chǔ)空間浊洞。
問(wèn)題:一段連續(xù)的存儲(chǔ)空間只能有一個(gè)別名嗎?
3.2 引用
C++中的引用
在C++中增加了引用的概念
- 引用可以看作一個(gè)已定義變量的別名
- 引用的語(yǔ)法:
Type& name = var;
int a = 4; int& b = a; // b作為a的別名 b = 5; // 操作b就是操作a
注意:
普通引用在定義時(shí)必須用同類(lèi)型的變量進(jìn)行初始化胡岔。
C++對(duì)三目運(yùn)算符做了些啥法希?
- 當(dāng)三目運(yùn)算符的可能返回都是變量時(shí),返回的是變量引用
- 當(dāng)三目運(yùn)算符的可能返回中有常量時(shí)靶瘸,返回的是值
int a = 1; int b = 2; (a < b ? a : b) = 3; // ok苫亦,返回a或b的引用,可作為左值 (a < b ? 1 : b) = 4; // err怨咪,返回1或b的值屋剑,不能作為左值
4、小結(jié)
bool
類(lèi)型是C++新增加的基礎(chǔ)類(lèi)型
bool
類(lèi)型的值只能是true
和false
C++中的三目運(yùn)算符可作為左值使用
C++中的引用可以看作變量的別名來(lái)使用
三目運(yùn)算符的可能返回都是變量時(shí)诗眨,返回的是引用