我需要在我的 .h 文件中初始化一个 static const std::list<std::string>
。但是,我该怎么做呢?
class myClass {
static const std::list<std::string> myList = {"a", "b", "c"};
}
谢谢。
抱歉,您不能直接这样做。
要在类定义内部初始化const static数据成员,它必须是整数(或枚举)类型;并且如果此对象仅出现在整数常量表达式的位置,则也必须是如此。 有关更多详细信息,请参见C++11标准中的以下内容。
$9.4.2 Static data members and
$3.2 One Definition rule
使用C++11,您可以使用“第一次调用初始化”惯用语,如@smRaj所指出的答案中建议的那样:
class myClass {
public:
// The idiomatic way:
static std::list<std::string>& myList() {
// This line will execute only on the first execution of this function:
static std::list<std::string> str_list = {"a", "b", "c"};
return str_list;
}
// The shorter way (for const attributes):
static const std::list<std::string> myList2() { return {"a", "b", "c"}; }
};
然后像往常一样访问它,但在其后添加()
:
int main() {
for(std::string s : myClass::myList())
std::cout << s << std::endl;
}
输出:
a
b
c
class myClass{
static const std::list<std::string> myList;
}
在头文件中定义你的类,然后在其中声明一个变量,在实现文件中进行初始化:
const myClass::myList = std::list<std::string>({"a", "b", "c"});
static std::string tmp[] = { "a", "b", "c" };
static std::list<std::string> myList(tmp, tmp + 2);
class myClass
{
public:
static struct _Globals {
const std::list<std::string> myList = {"a", "b", "c"}
} g;
};
不是初始化单个成员,而是在 .cpp 中初始化整个静态结构:
myClass::_Globals myClass::g;
这些值可以通过访问
myClass::g.myList;
关于静态变量的更多信息可以在这个答案中找到关于静态字符串的内容。