Primer说错误,但代码在GCC上工作正常

Primer says error but code works fine on GCC

本文关键字:GCC 工作 代码 错误 Primer      更新时间:2023-10-16

这段代码工作正常:

    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 应生成警告。