Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在类中初始化静态向量最方便的方法是什么?_C++_Vector_Static_Initialization_C++11 - Fatal编程技术网

C++ 在类中初始化静态向量最方便的方法是什么?

C++ 在类中初始化静态向量最方便的方法是什么?,c++,vector,static,initialization,c++11,C++,Vector,Static,Initialization,C++11,如果要初始化类中的向量,例如: class A { private: static std::vector<double> label_map; }; A类{ 私人: 静态std::向量标签映射; }; 如果我想初始化这个静态向量,最好的方法是什么?我在其他一些帖子中读到,从GCC4.4开始,它支持C++0x中的新特性,我们可以直接使用它 static std::vector<double> label_map = {1, 2, 3, 4}; stati

如果要初始化类中的向量,例如:

class A {
  private:
    static std::vector<double> label_map;
};
A类{
私人:
静态std::向量标签映射;
};
如果我想初始化这个静态向量,最好的方法是什么?我在其他一些帖子中读到,从GCC4.4开始,它支持C++0x中的新特性,我们可以直接使用它

static std::vector<double> label_map = {1, 2, 3, 4};
static std::vector label_map={1,2,3,4};
然而,它似乎对我不起作用。

所以。。。总结:

// thefile.cpp

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

std::vector<int> Foo::v { 1, 2, 3, 4 };
//thefile.cpp
福班
{
静态std::向量v;
};
std::vector Foo::v{1,2,3,4};
使用
g++-std=c++0x-c-o thefile.o thefile.cpp#…

进行编译,以便。。。总结:

// thefile.cpp

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

std::vector<int> Foo::v { 1, 2, 3, 4 };
//thefile.cpp
福班
{
静态std::向量v;
};
std::vector Foo::v{1,2,3,4};


<>编译用<代码> g++ + STD= C++ +0x-C-O文件.o文件.CPP·…./COD> ./P>什么是问题——如何获得C++编译器?从GCC网站下载它…好吧,你是在命令行中添加
-std=c++0x
吗?最好是
label\u map{1,2,3,4}
而不是
label\u map={1,2,3,4}
,因为前者用
1,2,3,4}初始化向量,4
虽然后者创建了一个临时向量,并使用向量副本构造函数来生成
label_map
@derekhh,但您是正确的,唯一可以这样做的方法是,如果静态变量是
const
且为整数类型,并且您从不获取它的地址。@Kerrek:Derp,第二部分应该是“静态、const和整型”。问题是——如何得到一个C++编译器?从GCC网站下载它……嗯,你是否把“代码> -STD= C++ +0X < /代码>添加到命令行?最好是做<代码> LabelyMax { 1, 2, 3,4 } <代码> > <代码> LabelSypMA= { 1, 2, 3,4 }。因为前者用
1,2,3,4
初始化向量,而后者创建一个临时向量,并使用向量副本构造函数来创建
label\u map
@derekhh您是正确的,唯一的方法是如果静态变量是
const
且为整数类型,并且您从不获取它的地址。@Kerrek:Derp,第二部分应该是“静态、常量和整数类型”。为什么第二对花括号?@Xeo:Hm,首选的统一初始化语法?同样有效:
v{1,2,3}
v={1,2,3}
,以及
v({1,2,3})
。我总是想象
v{il}
,其中,
il
是一个现有的初始化列表,在某个复杂的类构造函数中…我想是口味的问题。哇……我从来没有猜到。这符合标准吗?编辑:NVM,我在命令行中看到了c++0x。这不会编译。你需要省略一级大括号。@johanneschaub-litb:Ah,另一个大括号错误.我不久前自己提交了一两个…我不确定;你有一些标准参考为什么这不好?在我看来,它应该与调用IL构造函数的
v({1,2,3})
相同?为什么是第二对花括号?@Xeo:Hm,首选的统一初始化语法?同样有效:
v{1,2,3}
v={1,2,3}
v({1,2,3})
。我总是想象
v{il}
,其中,
il
是一个现有的初始化列表,在某个复杂的类构造函数中…我想是口味的问题。哇……我从来没有猜到。这符合标准吗?编辑:NVM,我在命令行中看到了c++0x。这不会编译。你需要省略一级大括号。@johanneschaub-litb:Ah,另一个大括号错误.我不久前自己提交了一个或两个…我不确定;您是否有一些标准参考,为什么这不好?在我看来,它应该与调用IL构造函数的
v({1,2,3})
相同?