无法访问 C++ 中全局变量的构造函数中的静态(非原始)成员;
当使用例如 int 而不是 std::string、std::map 等时,以下代码工作正常。
我有一个全局变量,在使用默认构造函数时需要静态成员的条目,但该字符串在这里为空。变量“test”不必位于类本身内部。我认为 STL 组件(或非基元)涉及一些初始化顺序问题。使用 C++14。
// MyClass.h
#include <string>
class MyClass{
public:
static const std::string test;
MyClass();
};
// MyClass.cpp
#include <iostream>
#include "MyClass.h"
const std::string MyClass::test = "Yooooooo";
MyClass::MyClass(){
std::cout << test << std::endl;
}
// main.cpp
#include <iostream>
#include "MyClass.h"
const MyClass c;
int main(){
//MyClass c; // Would work
std::cout << "There should be something above this line." << std::endl;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
具有静态存储持续时间的对象在不同编译单元中相对于彼此初始化的顺序是无序的。
来自 C++ 14 标准(3.6.2 非局部变量的初始化)
您在不同的编译单元中有两个具有静态存储持续时间的变量
,
您可以通过使用内联说明符声明变量来避免该问题。
The order in which objects with the static storage duration are initialized in different compilation units relative to each other is unsequenced.
From the C++ 14 Standard (3.6.2 Initialization of non-local variables)
You have two variables with static storage duration in different compilation units
and
You could avoid the problem by declaring the variable with the inline specifier.