1

我对这部分代码有疑问:

typedef std::array<u32, 3> my_array;

void foo()
{
    my_array a1{{1, 2, 3}};
    a1 = {{1, 2, 3}}; // PROBLEM - does not work;

    my_array a2{{3, 2, 1}};
    a1 = a2;
}

GCC 4.7 也编译此代码,但从 2012 年 11 月开始使用 cl 的 Visual Studio 失败并显示:

 error C2679: binary '=' : no operator found which takes a right-hand
 operand of type 'initializer-list' (or there is no acceptable
 conversion) 1>        C:\Program Files (x86)\Microsoft Visual Studio
 11.0\VC\INCLUDE\array(211): could be 'std::array<u32,3> &std::array<u32,3>::operator =(const std::array<u32,3> &)' 1>       
 while trying to match the argument list '(my_array, initializer-list)'

这种语法是否正确并符合 c++11 标准?我找不到有关此的任何信息,也不知道我应该责怪哪个编译器。提前感谢您的帮助。

此致。

4

1 回答 1

1

正如我所说,VS2012有点蹩脚并且有一些困难C++11,如果你想要一个列表,看这里

于 2013-04-23T12:11:35.210 回答