2017-10-09 102 views
0

我是C++的新手,因此陷入了困境。C++縮小錯誤

#include<iostream> 
int main() 
{ 
    bool a = 2; 
    bool e { 4 }; //error 
    std::cout << a << e; 
    std::cin.get(); 

} 

我收到錯誤信息爲'initializing': truncation from 'int' to 'bool'。爲什麼a工作,而不是e

+2

更重要的是,你爲什麼用一個整數初始化一個布爾值? –

+1

你想要做什麼?嘗試將'4'設置爲布爾變量? – user3437460

+0

嘗試將'bool'初始化爲非零('True') – ccdq23

回答

1

A narrowing conversion(粗略地說)是可能需要在某些值上截斷或取模的內置類型之間的轉換,因爲如果在編譯時已知目標類型不能適當地表示給定的源值,或者如果在編譯時不知道該值,可能有一些源值。

因此,從已知值24bool轉換是收縮轉換,因爲bool不能真正代表這些數字,只有01

自從C++ 11以來,程序要求在用於聚合初始化或列表初始化的{花括號}中找到的任何值進行縮小轉換是非法的。

當源不在大括號內時,例如您的bool a = 2;,仍然允許縮小轉換。