C++ Primer表示错误,但代码在GCC上运行良好

C++ Primer表示错误,但代码在GCC上运行良好,c++,c++11,C++,C++11,此代码工作正常: double a =2.12345; int b{a}; // According to primer error: narrowing conversion required int c(a); //This is fine 是不是我错过了什么?对于我来说,当浮点/双精度赋值给int时,小数点左侧的值是打印的下限值。底漆上写着错误 是不是我错过了什么 编译器偏离标准的不幸细节。GCC不会强制执行它,除非您告

此代码工作正常:

    double a =2.12345;
    int b{a};            // According to primer error: narrowing conversion required
    int c(a);            //This is fine
是不是我错过了什么?对于我来说,当浮点/双精度赋值给int时,小数点左侧的值是打印的下限值。底漆上写着错误

是不是我错过了什么

编译器偏离标准的不幸细节。GCC不会强制执行它,除非您告诉它应该这样做。尝试使用-pedanticerrors选项编译


<> p>引物没有错,只是根据C++标准是一个不完善的程序。但是编译器可能会选择接受它作为扩展,GCC就是这样做的。

一些编译器在默认情况下正确地执行它。例如,MacOSX clang将返回一个错误:

无法在初始值设定项列表中将类型“double”缩小为“int”[-Wc++11缩小]

对于GCC,选项-Wconversion应该生成一个警告。

相关:尝试使用g++-std=c++14构建它,这样就不会得到gnu++14扩展。