【问题标题】:What is the most convenient way to initialize a static vector inside a class?在类中初始化静态向量最方便的方法是什么?
【发布时间】:2012-01-21 15:18:56
【问题描述】:

如果我想在一个类中初始化一个向量,例如:

class A {
  private:
    static std::vector<double> label_map;
};

如果我想初始化这个静态向量,最好的方法是什么?我在其他一些帖子中看到说,从 GCC 4.4 开始,它支持 C++0x 中的新功能,我们可以直接使用

static std::vector<double> label_map = {1, 2, 3, 4};

不过好像对我不起作用。

【问题讨论】:

  • 问题是什么 - 如何获得 C++ 编译器?从 GCC 网站下载它...
  • 嗯,你是在命令行中添加-std=c++0x吗?
  • label_map { 1, 2, 3, 4 }label_map = {1, 2, 3, 4} 更好,因为前者用1, 2, 3, 4 初始化向量,而后者创建一个临时向量并使用向量复制构造函数来制作label_map
  • @derekhh 你是对的,你可以这样做的唯一方法是静态变量是const 并且是整数类型,并且你永远不会获取它的地址。
  • @Kerrek:Derp,第二部分应该是“静态、常量和整数类型”。

标签: c++ vector static initialization c++11


【解决方案1】:

所以...结束:

// thefile.cpp

class Foo
{
    static std::vector<int> v;
};

std::vector<int> Foo::v { 1, 2, 3, 4 };

g++ -std=c++0x -c -o thefile.o thefile.cpp # ...编译。

【讨论】:

  • 为什么是第二对大括号?
  • @Xeo:嗯,首选的统一初始化语法?也适用:v{1,2,3}v = {1,2,3}v({1,2,3})。我总是想象v { il },其中il 是一个现有的初始化列表,在一些复杂的类构造函数中......我想是口味问题。
  • 哇...我绝对猜不到。这个标准符合吗?编辑:NVM,我在命令行中看到了 c++0x。
  • 这不会编译。您需要省略一级大括号。
  • @JohannesSchaub-litb:啊,另一个大括号错误。不久前我自己提交了其中的一两个……我不确定;你有一些标准的参考,为什么这不行?在我看来,它应该与调用 IL 构造函数的v({1,2,3}) 相同?
猜你喜欢
  • 1970-01-01
  • 2014-12-11
  • 2013-08-08
  • 2013-08-08
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多