C++中的布爾類型c++
- C++在C語言的基本類型系統之上增長了
bool
- C++中的
bool
可取的值只有true
和false
- 理論上
bool
之佔用一個字節注意:數組
true
表明真值,編譯器內部用1來表示spa
false
表明非真值, 編譯器內部用0來表示指針C語言中:code
用整型值來代替
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
代碼試驗:it
#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++中的基本數據類型io
- 能夠定義
bool
類型的全局變量- 能夠定義
bool
類型的常量- 能夠定義
bool
類型的指針- 能夠定義
bool
類型的數組......
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++對三目運算符進行了這樣的升級,意義何在?
三目運算符全部的可能返回都是變量的時候,返回的就是變量自己,由此引出了新概念:引用
變量是一段實際連續存儲空間的別名,程序中經過變量來申請並命名存儲空間,經過變量的名字能夠使用存儲空間。
問題:一段連續的存儲空間只能有一個別名嗎?
C++中的引用
在C++中增長了引用的概念
- 引用能夠看做一個已定義變量的別名
- 引用的語法:
Type& name = var;
int a = 4; int& b = a; // b做爲a的別名 b = 5; // 操做b就是操做a注意:
普通引用在定義時必須用同類型的變量進行初始化。
C++對三目運算符作了些啥?
- 當三目運算符的可能返回都是變量時,返回的是變量引用
- 當三目運算符的可能返回中有常量時,返回的是值
int a = 1; int b = 2; (a < b ? a : b) = 3; // ok,返回a或b的引用,可做爲左值 (a < b ? 1 : b) = 4; // err,返回1或b的值,不能做爲左值
bool
類型是C++新增長的基礎類型
bool
類型的值只能是true
和false
C++中的三目運算符可做爲左值使用
C++中的引用能夠看做變量的別名來使用
三目運算符的可能返回都是變量時,返回的是引用