0

我有一个 C++ 项目,其中有const string两个.o文件中的常量,其中一个文件中的常量使用另一个文件中的值进行初始化。这曾经可以正常工作,但现在我使用的是更新的编译器,我一启动程序就会遇到段错误,我已经将它跟踪到依赖常量的初始化。

最小等效示例:

mystruct.h:

#include <string>
struct mystruct {
   static const string myconst;
}

mystruct.cc:

#include <mystruct.h>
const string mystruct::myconst = "a"

程序.cc:

#include <mystruct.h>
const string mydependentconst = mystruct::myconst + "b";
int main() {}

此代码有时会出现段错误,因为mystruct::myconst在初始化时尚未mydependentconst初始化。我已经通过使变量初始化独立(有效地,mydependenconst = "ab")来修复我的代码,但我想知道:它实际上是未定义的行为,我之前只是幸运吗?

我认为这归结为我是否可以期望我的.o文件中的常量初始化的特定顺序,或者我是否必须假设该顺序是未指定的。

请注意,我在mystruct::myconst任何地方使用内部函数都没有问题,我只是在prog.cc.

背景:这发生在一个有 15 年历史的 C++ 项目(使用g++with -std=gnu++98)中,我正试图在更新的操作系统上恢复。它在 CentOS 6 上运行良好,现在我正在修复它以在 CentOS 7 上运行,接下来我也会做更新的操作系统。

4

0 回答 0