我尝试了以下代码:
int main()
{
int x {23.22};
}
其中包括需要缩小的初始化,但代码编译良好,没有任何错误或警告。另一方面,以下代码给出错误:
int main()
{
int x[]{23.22};
}
我发现了一个错误还是什么?
PS:我目前使用的是 GCC 4.5.0
看起来像一个错误。以下内容直接来自草案 n3092:
8.5.4 列表初始化
— 否则,如果初始化列表只有一个元素,则从该元素初始化对象;如果需要缩小转换(见下文)将元素转换为 T,则程序格式错误。
int x1 {2}; // OK
int x2 {2.0}; // error: narrowing
您可以在此处查看 GCC 的 C++0X 合规性。Initializer Lists ( N2672 ) 的状态为“是”——但请注意,这只是实验性的(因此您可能会遇到错误)。
来自错误报告的更新:GCC 确实会发出带有-Wconversion
标志的警告(不,这不在 涵盖范围内-Wall
)。
由于 C++0x 支持仍在实现中,即使根据标准应该存在错误或警告而没有,但这并不一定是错误,只是尚未实现。如果在实施该特定功能后标准草案已更改,则也可能发生这种情况。
使用正在进行中的软件或标准的事实是,根据最新规范应该存在的东西不存在。