Primer说错误,但代码在GCC上工作正常
Primer says error but code works fine on GCC
这段代码工作正常:
double a =2.12345;
int b{a}; // According to primer error: narrowing conversion required
int c(a); //This is fine
是我错过了什么吗?对我来说,当将浮点/双精度分配给 int 时,将打印小数点左侧的值(地板值(。入门说错误。
是我错过了什么吗?
编译器偏离标准的不幸细节。GCC 不会强制执行它,除非你告诉它应该这样做。尝试使用 -pedantic-errors
选项进行编译。
入门没有错,仅根据C++标准,它是一个格式不正确的程序。但是编译器可能会选择接受它作为扩展,这就是GCC所做的。
一些编译器(正确地(默认强制执行它。例如,MacOSX clang 会返回一个错误:
type 'double' cannot be narrowed to 'int' in initializer list [-Wc++11-narrowing]
对于 GCC,选项 -Wconversion
应生成警告。
相关文章:
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- glibc 版本比 gcc 版本和 -wl,-rpath 不工作
- C++指向成员的指针的类内初始化会使 MSVC 失败(但 GCC/Clang 工作)
- 在 GCC 中工作的外行构造函数模板在 Clang 中失败
- C 11螺纹 - 非静态成员功能的使用无效 - 工作GCC 5.1.0损坏的GCC 7.3.1
- GCC 和 clang 抛出"no matching function call"但 msvc (cl) 按预期编译和工作
- 为什么一些 GCC 警告标志不属于C++语言,但在C++中工作
- 在 gcc 上自己的元组实现段错误,同时在 clang 中工作
- Primer说错误,但代码在GCC上工作正常
- 继承默认构造函数在 gcc 中失败并在 clang 中工作,哪个有错误?
- 构造函数上的SFINAE在VC2017中工作,但在clang / gcc中不起作用
- 无限递归模板实例化使用clang时GCC工作正常
- 为什么std::nothrow在gcc(4.9)中没有按预期工作
- 为什么这个文件不能在 gcc 中编译?它在 VS 中工作正常
- Cython导入只工作一次,然后会出现gcc.bat错误
- 类模板继承无法在 GCC 中编译,但在 Visual Studio 中工作
- GCC 4.9 中的模板实例化错误,在 GCC 4.8 中工作正常
- 自定义分配器- Microsoft std::map实现对相同的元素进行两次重新分配,GCC工作得很好
- 宏在GCC工作,但在Solaris编译器失败