C++ 布爾類型和引用的用法詳解

來源:互聯網
上載者:User

1、布爾類型

C++中的布爾類型

  • C++在C語言的基本類型系統之上增加了bool

  • C++中的bool可取的值只有truefalse

  • 理論上bool之佔用一個位元組

注意:

true代表真值,編譯器內部用1來表示

false代表非真值, 編譯器內部用0來表示

C語言中:

用整型值來代替bool類型,常用0:flase, 1:true

C++做了類型增強,增加了一個非常嚴謹的bool類型,truefalse作為關鍵字存在。

在C++的布爾類型中,bool類型只有truefalse兩個值,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++中的引用

  • 在C++中增加了引用的概念

    int a = 4;int& b = a;     // b作為a的別名b = 5;        // 操作b就是操作a
    • 引用可以看作一個已定義變數的別名

    • 引用的文法:Type& name = var;

注意:

普通引用在定義時必須用同類型的變數進行初始化。

  • C++對三目運算子做了些啥?

    int a = 1;int b = 2;(a < b ? a : b) = 3;    // ok,返回a或b的引用,可作為左值(a < b ? 1 : b) = 4;    // err,返回1或b的值,不能作為左值
    • 當三目運算子的可能返回都是變數時,返回的是變數引用

    • 當三目運算子的可能返回中有常量時,返回的是

4、小結

bool類型是C++新增加的基礎類型

bool類型的值只能是truefalse

C++中的三目運算子可作為左值使用

C++中的引用可以看作變數的別名來使用

三目運算子的可能返回都是變數時,返回的是引用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.