C++ 布爾類型和引用

一、布爾類型

C++中的布爾類型c++

  • C++在C語言的基本類型系統之上增長了bool
  • C++中的bool可取的值只有truefalse
  • 理論上bool之佔用一個字節

注意:數組

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

false表明非真值, 編譯器內部用0來表示指針

C語言中:code

用整型值來代替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

代碼試驗: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++對三目運算符進行了這樣的升級,意義何在?

三目運算符全部的可能返回都是變量的時候,返回的就是變量自己,由此引出了新概念:引用

三、引用

3.1 變量名

變量是一段實際連續存儲空間的別名,程序中經過變量來申請並命名存儲空間,經過變量的名字能夠使用存儲空間。

問題:一段連續的存儲空間只能有一個別名嗎?
圖片描述

3.2 引用

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類型的值只能是truefalse

C++中的三目運算符可做爲左值使用

C++中的引用能夠看做變量的別名來使用

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

相關文章
相關標籤/搜索