6

我尝试了以下代码:

int main()
{
   int x {23.22};
}

其中包括需要缩小的初始化,但代码编译良好,没有任何错误或警告。另一方面,以下代码给出错误:

int main()
{
   int x[]{23.22};
}

我发现了一个错误还是什么?

PS:我目前使用的是 GCC 4.5.0

4

2 回答 2

7

看起来像一个错误。以下内容直接来自草案 n3092:

8.5.4 列表初始化

— 否则,如果初始化列表只有一个元素,则从该元素初始化对象;如果需要缩小转换(见下文)将元素转换为 T,则程序格式错误。

int x1 {2}; // OK
int x2 {2.0}; // error: narrowing

您可以在此处查看 GCC 的 C++0X 合规性。Initializer Lists ( N2672 ) 的状态为“是”——但请注意,这只是实验性的(因此您可能会遇到错误)。

来自错误报告的更新:GCC 确实会发出带有-Wconversion标志的警告(不,这不在 涵盖范围内-Wall)。

于 2010-08-22T13:41:56.843 回答
0

由于 C++0x 支持仍在实现中,即使根据标准应该存在错误或警告而没有,但这并不一定是错误,只是尚未实现。如果在实施该特定功能后标准草案已更改,则也可能发生这种情况。

使用正在进行中的软件或标准的事实是,根据最新规范应该存在的东西不存在。

于 2010-08-22T14:25:58.653 回答