您好,登錄后才能下訂單哦!
今天我們來學習下 C++ 中的布爾類型。說起布爾類型,有的同學可能在 C 語言中聽過,0 代表假,1 代表真。我們在 C 語言中用 int 類型的數來表示布爾類型,這也是可取的。但是在 C++ 中正式引出了布爾類型這個概念,它是一種基本類型。C++ 中的 bool 可取的值只有 true 和 false,理論上 bool 只占用一個字節。注意:true 代表真值,編譯器內部用 1 來表示;false 代表非真值編譯器內部用 0 來表示。
bool 類型只有 true(非0)和 false(0)兩個值,C++ 編譯器會將非 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)); // 1 printf("b = %d, a = %d\n", b, a); // 0, 0 b = 3; a = b; printf("b = %d, a = %d\n", b, a); // 1, 1 b = -5; a = b; printf("b = %d, a = %d\n", b, a); // 1, 1 a = 10; b = a; printf("a = %d, b = %d\n", a, b); // 10, 1 a = 0; b = a; printf("a = %d, b = %d\n", a, b); // 0, 0 return 0; }
我們分析下,第 8 行打印 bool 類型 b 的內存大小,那么便是為 1 了。由于它初始化為 false ,所以為 0, a = b 當然也為 0 了;第 11 行 b 為非 0。所以第 14 行打印出 1, 1;第 16 行 b 為非 0。所以第 19 行打印出 1, 1;第 21 行 a 為 10,所以第 24 行打印出 10, 1;第 26 行 a 為 0,所以第 29 行打印出 0, 0啦。我們看看編譯結果
因為布爾類型是 C++ 中的基本數據類型,所以我們可以定義 bool 類型的:局部變量、全局變量、常量、指針、數組 ... ; C++ 對三目運算符也進行了升級,在 C 語言中的三目運算符返回的是變量值,不能作為左值使用;但在 C++ 中,三目運算符可直接返回變量本身,所以它即可作為右值使用,又可作為左值使用。注意:三目運算符可能返回的值中如果有一個是常量值,則不能作為左值使用。
下來我們以代碼為例進行分析
#include <stdio.h> int main(int argc, char *argv[]) { int a = 1; int b = 2; (a < b ? a : b) = 3; printf("a = %d, b = %d\n", a, b); return 0; }
這段代碼在 gcc 中肯定編譯通不過因為三目運算符返回的是變量值,給常量賦值肯定出問題,那么在 g++ 中,它可以通過,返回的是變量本身,所以第 8 行相當于 a = 3。我們來看看編譯結果
我們看到 gcc 編譯直接報錯,但是 g++ 編譯通過,并且成功的改變了 a 的值。在這塊我們就不得不提變量名了,我們之前學過變量是一段實際連續存儲空間的別名;程序中通過變量來申請并命名存儲空間;通過變量的名字可以使用存儲空間。我們再來想一個問題:一段連續的存儲空間只能有一個別名嗎?在 C++ 中新增了引用的概念。那么什么是引用呢?引用可以看作一個已定義變量的別名,它的語法格式是:TYpe& name = var;注意:普通引用在定義時必須同同類型的變量進行初始化。我們以代碼為例進行分析
#include <stdio.h> int main(int argc, char *argv[]) { int a = 3; int& b = a; b = 5; printf("a = %d\n", a); printf("b = %d\n", b); printf("&a = %p\n", &a); printf("&b = %p\n", &b); return 0; }
我們看到在第 6 行進行了 a 的引用,也就是說, b 為 a 的別名,改變 b 的值就相當于改變 a 的值啦。我們看看編譯結果
我們看到 a 和 b 都改為了 5,并且他倆的地址是一樣的,也就證明了 b 是 a 的別名。那么回到之前的三目運算符的問題,當三目運算符的可能返回值都是變量時,返回的是變量引用;當三目運算符的可能返回值中有常量時,返回的是值。如下所示
通過對布爾類型和引用的學習,總結如下:1、bool 類型是 C++ 新增加的基礎類型,它的值只能是 true 和 false;2、C++ 中的三目運算符可作為左值使用;3、C++ 中的引用可以看作變量的別名來使用;4、三目運算符的可能返回都是變量時,返回的是引用。
歡迎大家一起來學習 C++ 語言,可以加我QQ:243343083。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。