如何在C++11中初始化一个作为类成员的静态常量向量?

22

我需要初始化一个作为类成员的静态常量向量。

我尝试过:

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

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

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

然而,这些方法都没有奏效。

我正在使用带有mingw的Eclipse。(我已启用c++11)


在类内定义静态变量,并在外部进行赋值。 - Grijesh Chauhan
3个回答

19

静态变量的初始化是在类外部进行的,像这样:

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

const vector<string> Example :: vr ({"hello", "world"});

有没有办法使用静态成员函数初始化一个const向量? - phoenix

13

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

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

// definition
const std::vector<std::string> MyClass::vec = ...;

唯一的例外是整型类型。

class MyClass {
public:
    // declaration and definition
    static const int MAX_BURRITOS = 5;
};

2
仅当值从未被ODR使用时,整数类型的异常才适用。 - ildjarn

9

虽然您的问题仅限于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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接