【发布时间】:2014-03-01 15:23:57
【问题描述】:
以下代码使用 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;
}
这是 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
我还没有找到如何在类定义中初始化这样的向量的示例。
哪个编译器是正确的?
如果语法无效,是否只有在构造函数初始化列表中初始化 m_vector 的选项?
【问题讨论】:
-
visual 2013 在类初始化中的非静态成员在每种情况下都不是正确的,例如,仅通过查看复制构造函数聚合失败。 initializer_list ctor 也是。
-
@galop1n 抱歉,我不太明白您的评论。请你澄清一下。
-
类成员初始化是一个 c++11 特性,在 VS2013 中首次亮相。但是当成员是聚合时,编译器有问题,并尝试使用复制构造函数。它也忽略了带有初始化列表的构造函数,并尝试仅将参数与常规构造函数匹配。
-
@galop1n 感谢您的澄清。
标签: c++ c++11 xcode5 visual-studio-2013 uniform-initialization