如何在c ++ 11中初始化一个静态const向量类成员

use*_*587 17 c++ initialization class vector c++11

我需要初始化一个静态const向量类成员...我试过了

static const vector<string> vr ({"2", "3", "4"});  

static const vector<string> vr = {"2", "3", "4"}; 

static const vector<string> vr {"2", "3", "4"};
Run Code Online (Sandbox Code Playgroud)

他们不工作....

我和mingw一起使用eclipse(我启用了c ++ 11)

Tom*_*rov 15

静态变量初始化在类之外完成,如下所示:

class Example
{
    static const vector<string> vr;
    // ...
};

const vector<string> Example :: vr ({"hello", "world"});
Run Code Online (Sandbox Code Playgroud)


Die*_*Epp 10

在类定义中声明静态成员,但在外部定义它们.

class MyClass {
public:
    // declaration
    static const std::vector<std::string> vec;
};

// definition
const std::vector<std::string> MyClass::vec = ...;
Run Code Online (Sandbox Code Playgroud)

这个例外是整体类型,

class MyClass {
public:
    // declaration and definition
    static const int MAX_BURRITOS = 5;
};
Run Code Online (Sandbox Code Playgroud)

  • 整数类型的例外仅适用于从未使用 ODR 的值。 (2认同)

jsc*_*edl 10

您确实将您的问题限制为 C++11,但我会将其放在这里,供未来在搜索结果中找到此问题的访问者使用。

如果您能够继续使用C++17,则可以const static inline在类声明中使用它来初始化静态成员,而不再需要将其放在类之外。

像这样:

#include <iostream>
#include <string>
#include <vector>

class Test {
public:
    const static inline std::vector<std::string> Names = { "Fred", "Barney", "Wilma" };
};

int main() {
    std::cout << Test::Names[0];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)