首頁 > 軟體

C++簡明分析講解布林型別及參照

2022-04-21 19:01:13

一、C++中的布林型別

  • C++在C語言的基本型別系統之上增加了bool
  • C++中的bool可取的值只有true和 false
  • 理論上bool只佔用一個位元組
  • C++編譯器會將非0值轉換為true ,0值轉換為false

注意:

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

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

下面看一下這段程式碼,加深一下對bool型別的理解。

#include <stdio.h>
 
int main(int argc, char *argv[])
{
    bool b = 0;
    printf("b = %dn", b);
    b++;
    printf("b = %dn", b);
    b = b - 3;
    printf("b = %dn", b);
    return 0;
}

下面為輸出結果,可以看到0值輸出為0,而非0值輸出為1,和上面介紹的一樣。

接下來再上一段程式碼,再次加深對布林型別的理解。

#include <stdio.h>
int main(int argc, char *argv[])
{
    bool b = false;
    int a = b;
    printf("sizeof(b) = %dn", sizeof(b));
    printf("b = %d, a = %dn", b, a);
    b = 3;
    a = b;
    printf("b = %d, a = %dn", b, a);
    b = -5;
    a = b;
    printf("b = %d, a = %dn", b, a);
    a = 10;
    b = a;
    printf("a = %d, b = %dn", a, b);
    a = 0;
    b = a;
    printf("a = %d, b = %dn", a, b);
    return 0;
}

下面為輸出結果,可以看到bool型別只佔用一個位元組,且輸出符合上面講的理論。

布林型別是C++中的基本資料型別

  • 可以定義bool型別的全域性變數
  • 可以定義bool型別的常數
  • 可以定義bool型別的指標
  • 可以定義bool型別的陣列
  • ......

二、C++中的三目運運算元

C++對三目運運算元進行了升級

C語言中的三目運運算元返回的是變數值

  • 不能作為左值使用

C++中的三目運運算元可直接返回變數本身

  • 既可作為右值使用,又可作為左值使用

注意:三目運運算元可能返回的值中如果有一個是常數值,則不能作為左值使用。

通過下面這個程式來說明一下C++對於三目運運算元的升級。

#include <stdio.h>
int main(int argc, char *argv[])
{
	int a = 1;
	int b = 1;
	(a < b ? a : b) = 3;
	printf("a = %d, b = %dn", a, b);
    return 0;
}

下面為輸出結果,可以看到上面的程式在C語言的編譯條件下編譯不通過,而在C++的編譯條件下編譯通過,這說明在(a < b ? a : b)程式碼中,因為a < b ,所以輸出a的值,然後把3賦值給a。

C++對三目運運算元做了什麼?

  • 當三目運運算元的可能返回都是變數時,返回的是變數參照
  • 當三目運運算元的可能返回中有常數時,返回的是值

從C++編譯器輸出結果也可知,第一種寫法編譯可以通過,第二種寫法編譯不通過,如下圖所示。

三、C++中的參照

變數名回顧

  • 變數是一段實際連續儲存空間的別名
  • 程式中通過變數來申請並命名儲存空間
  • 通過變數的名字可以使用儲存空間

變數命名及對應地址

在C++中新增加了參照的概念

  • 參照可以看作一個已定義變數的別名
  • 參照的語法: Type& name = var;

注意:普通參照在定義時必須用同型別的變數進行初始化。

以下面的程式為例,說明一下參照。

#include <stdio.h>
int main(int argc, char *argv[])
{
	int a = 4;
	int& b = a;    //b為a的別名
	printf("a = %d, b = %dn", a, b);    //操作b就是操作a
    return 0;
}

下面為輸出結果,可以看到a和b均為4,這就很好的說明了參照的概念。

為了進一步理解除參照,下面對上述程式進行了修改。

#include <stdio.h>
int main(int argc, char *argv[])
{
    int a = 4;
    int& b = a;
    b = 5;
    printf("a = %dn", a);
    printf("b = %dn", b);
    printf("&a = %pn", &a);
    printf("&b = %pn", &b);
    return 0;
}

下面為輸出結果,因為我們通過a變數的別名b對a變數進行了修改,操作b就相當於操作a,C++中可以對同一段連續的記憶體起任意多的別名,所以識別符號a和b代表記憶體裡面同一段連續的空間。

如果我們把 int& b = a; 改成float& b = a; 或者改成 float& b; 或者改成float& b = 1,則編譯器分別報如下錯誤,這說明C++編譯器對資料型別要求是非常嚴格的。

四、總結

  • bool型別是C++新增加的基礎型別
  • bool型別的值只能是true和false
  • C++中的三目運運算元可作為左值使用
  • C++中的參照可以看作變數的別名來使用
  • 三目運運算元的可能返回都是變數時,返回的是參照

到此這篇關於C++簡明分析講解布林型別及參照的文章就介紹到這了,更多相關C++布林型別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com