为什么初始化列表允许在C ++中缩小类型?

时间:2019-01-26 13:43:21

标签: c++ c++11 initializer-list type-narrowing

在使用{}初始化列表和C ++中的原始类型时,我看到两个不同的结果。

我只有在发出警告 缩小{}内d从double到int的转换时才能逃脱

double d {3.0};
int integer {d};

但是,如果我更明确地说明它,而不是警告,我会得到一个错误 在{}内将'3.0e + 0'从'double'转换为'int'的转换变窄了

int integer {3.0};

如果使用{},在这两种情况下C ++ 11都不能阻止任何缩小转换吗?那为什么只在一种情况下发生呢?

我正在使用MingGW使用C / C ++的最新版本的Eclipse。 C ++ 14是否有可能无意间出现了问题?

1 个答案:

答案 0 :(得分:1)

使用gcc变体时,您需要指定-Werror=narrowing使其变为错误而不是警告。 clang和vc ++更严格,默认情况下会发出错误。