应该如何在C++11中初始化这个成员向量

How should one initialise this member vector in C++11-style?

本文关键字:初始化 成员 向量 C++11      更新时间:2023-10-16

我有一个类,它有一个成员变量std::vector<double>。我想在该类的初始化列表中对此进行初始化。我已经尝试了以下代码

MyClass::MyClass()
  : m_myMemberVector( { 1.0, 2.0 } )
{...}

但是编译器将其解释为CCD_ 3的CCD_。我看到了这个问题错误:"double"不是类、结构或联合类型,它指出了输入迭代器的问题,但没有提供解决方案。

我在构造函数的主体中有一个使用BOOST的工作实现,但如果可能的话,我宁愿在初始化列表中这样做。有没有什么优雅的方法可以使用C++11风格的初始化来构造一个包含两个双精度的向量?

std::initializer_list<double>{ 1.0, 2.0 }而不是{ 1.0, 2.0 }可能有效,删除{ 1.0, 2.0 }周围的()也可能有效。

很可能这是编译器中的一个错误,所以让事情变得更明确可能会有所帮助。

另一种可能是m_myMemberVector实际上不是std::vector<double>,或者您正在使用的标准库没有启用C++11。

简单的解决方案是正确的:C++11没有正确启用。我看到了格式的编译器输出

MyClass.cxx:5:5: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]

并假设这意味着C++11支持将"默认启用"!显式使用-std=c++11进行重新编译,效果如预期。

有一个答案暗示了这一点,我想接受,但它似乎已经被删除了。感谢所有提出这一点的评论。