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