当int初始化为浮点值时,为什么支撑初始化不会出错?

时间:2018-02-16 11:23:21

标签: c++ c++11 initialization c++14 list-initialization

我正在学习JoséeLajoie和Stanley B. Lippman的C ++ Primer中的C ++。我读到当使用花括号初始化变量时,如果初始化导致数据丢失,则会发生错误。

double a=5.545;
int b{a};
std::cout<<b;

但是当我运行上面的代码时,我没有收到任何错误并将输出变为5。

PS:我正在使用CLion IDE和MingW C ++编译器。

1 个答案:

答案 0 :(得分:1)

这本书错了。从int构建double是完全正常和普通的,丢失数据(所有小数部分!)。这绝不是一个错误。

如果可以确定数据丢失,您的编译器可能警告您的数据丢失。那是善良的。但一般的原则是,通过编写这段代码,你真的说“我想丢失小数部分”。

如果您打开“警告为错误”,则任何此类警告都会转换为错误并停止构建。但这与转换本身无关。