C++ C++;未初始化全局命名空间变量-始终

C++ C++;未初始化全局命名空间变量-始终,c++,static,initialization,global-variables,C++,Static,Initialization,Global Variables,命名空间中声明了一组字符串。i、 e const std::string string1 = "string1"; Main调用使用其中一个字符串的函数,但该字符串始终为空。i、 这是失败的 assert(!string1.empty()); 我知道静态初始化的失败,但是这种行为是在调用main之后发生的,一切都应该在这一点上初始化,对吗?此外,无论我运行多少次或清除多少次&make,这种情况都不会失败 我能做些什么来解决这个问题或更好地处理问题 编辑: 很抱歉,我说这是在主叫之后发生的,我

命名空间中声明了一组字符串。i、 e

const std::string string1 = "string1";
Main调用使用其中一个字符串的函数,但该字符串始终为空。i、 这是失败的

assert(!string1.empty());
我知道静态初始化的失败,但是这种行为是在调用main之后发生的,一切都应该在这一点上初始化,对吗?此外,无论我运行多少次或清除多少次&make,这种情况都不会失败

我能做些什么来解决这个问题或更好地处理问题

编辑: 很抱歉,我说这是在主叫之后发生的,我错了。我声明了自己的名称空间变量,该变量试图在其构造函数中访问我提到的其他未初始化变量


我接受了yzt的建议,将自己的名称空间变量包装在一个函数中,以便在首次使用时对其进行初始化。

能否给出一个暴露错误的可编译小示例?是否确定没有隐藏全局变量的局部字符串1?如果创建自己的类并创建全局变量,请检查会发生什么情况。在构造函数中写入要输出的内容,查看是否所有全局变量都未初始化,或者它是否特定于std::string。@user2675345:您可以使用返回
字符串的函数初始化变量(而不是直接使用文本)然后在该函数中放置一个断点,以查看是否/何时调用该函数。显然,这个函数可以是一个简单的传递函数,只返回它的参数。不同的名称空间(头和源)?