2017-10-09 74 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;,仍然允许缩小转换。