窄化问题代码如下,这里我们将一个int类型较大的数字1000,赋值给取值范围更小的char类型:
int a = 1000;
char b = a;
这通常会造成一些问题,不过很多编译器对窄化转换发出警告。
C++11引入了一种初始化方式,可彻底避免窄化转换。例如,我们可以(也应该)使用{}列表记号来重写问题(即,用{}初始化来避免意外),如下:
double x {2.7}; //正确
int y {x}; //错误 double → int 可能窄化
int a {1000}; //正确
char b {a}; //错误 int → char 可能窄化
{}列表记号被称为通用统一初始化。