我正在学习JoséeLajoie和Stanley B. Lippman的C ++ Primer中的C ++。我读到当使用花括号初始化变量时,如果初始化导致数据丢失,则会发生错误。
double a=5.545;
int b{a};
std::cout<<b;
但是当我运行上面的代码时,我没有收到任何错误并将输出变为5。
PS:我正在使用CLion IDE和MingW C ++编译器。
答案 0 :(得分:1)
这本书错了。从int
构建double
是完全正常和普通的,将丢失数据(所有小数部分!)。这绝不是一个错误。
如果可以确定数据丢失,您的编译器可能警告您的数据丢失。那是善良的。但一般的原则是,通过编写这段代码,你真的说“我想丢失小数部分”。
如果您打开“警告为错误”,则任何此类警告都会转换为错误并停止构建。但这与转换本身无关。