布爾類型 bool

在C++中,bool類型只有true(非0)false(0)兩個值,且bool類型只佔用了一個字節。

true非0,編譯器內部用1來表示。

false0 ,編譯器內部用0表示。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    bool b = 0; //合法,兼容c語言特性,0代表false
       
    printf("b = %d\n", b);
    
    //bool類型支持數學運算
    b++;
    
    printf("b = %d\n", b);
    
    b = b - 3;
    
    printf("b = %d\n", b);
    
    return 0; 
}

結果如下:

__android_log_print 布爾型_#三目運算符

分析:在C++中,遇到布爾類型bool時,將bool類型當成一個只佔用1個字節的整形數。

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    bool b = false; //0
    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;
}

結果如下:

__android_log_print 布爾型_#引用_02

 

 

 

三目運算符

三目運算符即可作為右值使用,又可作為左值使用。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    (a < b ? a : b) = 3;    // a = 3;
    
    printf("a = %d, b = %d\n", a, b);
    
    return 0;
}

結果如下:

__android_log_print 布爾型_示例程序_03

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    (a < b ? a : 2) = 3;
    
    printf("a = %d, b = %d\n", a, b);
    
    return 0;
}

結果如下:

__android_log_print 布爾型_運算符_04

三目運算符可能返回的值中如果有一個是常量值,則不能作為左值使用

意義:如果三目運算符的返回都是變量的時候,返回的是變量的本身

 

 

 

引用

變量名的本質是存儲空間的別名。

引用:已定義變量的別名

引用的語法:Type& name = var;

引用在定義時,必須初始化,且類型必須一致,初始化的值必須是變量,而非常量。

int a = 4;
int& b = a;    //b為a的別名
b = 5;         //操作b就是操作a,本質是將5賦值給a,a=5

注意:普通引用在定義時必須用相同類型的變量進行初始化。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 4;
    int& b = a;
    
    b = 5;
    
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    //相同的地址,意味着a和b標識符代表內存同一段連續的空間
    printf("&a = %p\n", &a);
    printf("&b = %p\n", &b);
    
    return 0;
}

結果如下:

__android_log_print 布爾型_#三目運算符_05

在C++,完全可以對同一段連續的內存,起任意多的別名。

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 4;
    float& 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;
}

結果如下:

__android_log_print 布爾型_#布爾_06

因為C++是強類型的語言。引用b的類型 必須和 變量a要一樣。

 

 

 

C++中對三目運算符

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

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

int a = 1;
int b = 2;

(a < b ? a : b) = 3;  //正確,返回a或b的引用,可作為左值
(a < b ? 1 : b) = 4;  //錯誤,返回1或b的值,不能作為左值

 

 

 

小結

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

bool類型的值只能是true(非0)false(0)

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

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

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