初始化字符串的静态常量列表
Initialize a static const list of strings
我需要在.h中初始化一个static const std::list<std::string>
。但是,我该怎么做呢?
class myClass {
static const std::list<std::string> myList = {"a", "b", "c"};
}
谢谢。
如何初始化my.h中的静态conststd::列表
不,你不能直接这么做。
要在类定义内初始化常量静态数据成员,它必须是整型(或枚举)类型;如果这样的对象只出现在积分常数表达式的位置,也是如此。有关更多详细信息,请参阅以下位置的C++11标准。
$9.4.2 Static data members and
$3.2 One Definition rule
但是,你可以做这样的事情:如何在头文件中定义const-static std::string?
使用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);
类静态变量可以在头中声明,但必须在实现文件中定义。这是因为静态变量的一个实例,而编译器无法在要放置哪个生成的对象文件,所以您必须做出决定通过在实现文件中定义变量。
用C++11中的声明保留静态值的定义可以使用嵌套的静态结构。在这种情况下,静态成员是一个结构,必须在.cpp文件中定义,但值都在标题中。
class myClass
{
public:
static struct _Globals {
const std::list<std::string> myList = {"a", "b", "c"}
} g;
};
不是初始化单个成员,而是在.cpp:中初始化整个静态结构
myClass::_Globals myClass::g;
使用访问这些值
myClass::g.myList;
关于静态变量的更多信息在这个关于静态字符串的答案中。
相关文章:
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 如何在 c++ stl 中获取列表中被推回的元素的地址,在常量时间内?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 在模板函数参数列表中忽略常量
- 对列表中的任意元素的常量时间访问 (C++)
- 常量变量初始化仅与成员初始化列表一起工作
- 初始化列表中常量变量的"this"关键字
- 如何使可变 lambda 捕获列表的某些成员变得非常量
- 从类型为"<大括号括起来的初始值设定项列表>"的类型非常量引用的无效初始化
- 初始化列表中的随机常量
- C++中非常量列表迭代器的奇怪行为
- 列表的迭代器可以返回非常量引用吗?
- 如何在c++中创建一个列表及其内容常量
- 实现常量对象列表
- C++:在初始化列表中传递一个常量 *p
- C++ 中常量列表的迭代器<t>
- 为什么允许在初始值设定项列表中从常量指针到常量到常量指针到非常量进行转换
- 初始化字符串的静态常量列表
- 键常量列表
- 这有多危险?(列表<T>正在强制转换为列表<常量 T>)