我是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
?
答案 0 :(得分:1)
(粗略地说)narrowing conversion是内置类型之间的转换,可能需要截断或取一些值的模数,因为目标类型不能适当地表示给定的源值,如果已知的话如果在编译时未知该值,则编译时间或一些可能的源值。
因此,从已知值2
或4
到bool
的转换是一种缩小转化,因为bool
无法真正代表这些数字,只有{{} 1}}或0
。
自从C ++ 11以来,程序要求对用于聚合初始化或列表初始化的1
花括号{
中的任何值进行缩小转换是非法的。
当源不是大括号时,仍然允许缩小转换,例如}
。