分配花括号初始化列表给数组是正确的吗?

9

标准规定,在5.17/9章节下

一个大括号初始化列表可以出现在以下场景的右侧:
- 标量类型赋值语句[...]
- 用户自定义赋值运算符所定义的赋值语句[...]

然而在GCC 4.5.1-pre9999中,我可以使用-std=c++0x编译此代码(而不是-std=gnu++0x)

#include <iostream>

int main()
{
        int test[] = {1,2,3};
        std::cout << test[0] << test[1] << test[2];
        test = {4,5,6};
        std::cout << test[0] << test[1] << test[2] << std::endl;
}

它打印出123456。这里的GCC正确吗?


5
投票关闭,因为这个问题过于局部化,是一个已经过时的编译器版本中的错误。 - Cubbi
1个回答

4

我认为这可能是一个bug。初始化 (int test = {1,2,3};)没有问题,但就我所知,标准中没有规定允许赋值操作。


如果允许这样做,那么逻辑上数组赋值也应该被允许。 - anon
4
你说得对,显然这是GCC的一个bug,在GCC 4.6中已经修复:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44045#c12 - Cubbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接