如何初始化类定义中的向量成员变量?

ksl*_*ksl 6 c++ uniform-initialization c++11 xcode5 visual-studio-2013

以下代码使用XCode 5.0但不是Visual Studio 2013编译正常.

#include <vector>

class VectorInit
{
private:
    std::vector<int> m_vector{1, 2, 3};   // fails to compile using VS 2013
};

int main()
{
    std::vector<int> vector{1, 2, 3};

    VectorInit vectorInit;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是Visual Studio报告的错误:

Error   1   error C2664: 'std::vector<int,std::allocator<_Ty>>::vector(std::initializer_list<int>,const std::allocator<_Ty> &)' : cannot convert argument 3 from 'int' to 'const std::allocator<_Ty> &' c:\visual studio 2013\projects\vector-init\main.cpp 6   1   vector-init
Run Code Online (Sandbox Code Playgroud)

我还没有设法找到一个如何在类定义中初始化这样的向量的示例.

哪个编译器正确?

如果语法无效,是在构造函数初始化列表中初始化m_vector的唯一选项吗?

gal*_*p1n 7

在类成员初始化是一个c ++ 11功能,在VS2013中首次亮相.但是当成员是聚合时,编译器会出错并尝试使用复制构造函数.它忽略了构造函数也采用初始化列表,并尝试仅将参数与常规构造函数参数匹配.

解决方法是,您可以创建临时向量,然后使用该语法移动,直到对编译器进行适当更新.

class VectorInit
{
private:
    std::vector<int> m_vector { std::vector<int>{ 1, 2, 5, 7 } };
};
Run Code Online (Sandbox Code Playgroud)