【问题标题】:How can I initialize a static const vector that is a class member in c++11?如何初始化作为 c++11 中的类成员的静态 const 向量?
【发布时间】:2012-10-03 01:36:58
【问题描述】:

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

我试过了:

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

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

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

但是,这些都不起作用。

我正在将 Eclipse 与 mingw 一起使用。 (我开启了c++11)

【问题讨论】:

  • 在类内定义静态变量并在外进行赋值-

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


【解决方案1】:

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

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

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

【讨论】:

  • 有没有办法用static成员函数初始化constvector
【解决方案2】:

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

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;
};

【讨论】:

  • 整数类型的例外仅适用于从不使用 ODR 的值。
【解决方案3】:

您确实将您的问题限制在 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2018-08-03
    • 2012-02-02
    • 2013-04-13
    • 2011-03-19
    相关资源
    最近更新 更多