在一个.o文件中初始化的c ++常量依赖于在另一个文件中定义的一个c ++常量是否存在未定义的行为?

问题描述

我有一个C ++项目,在两个const string文件中带有.o常量,其中一个文件中的常量使用另一个文件中的值初始化。以前可以正常工作,但是现在我使用的是较新的编译器,因此在启动程序后立即遇到段错误,并将其跟踪到相关常量的初始化。

最小等效示例:

mystruct.h:

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

mystruct.cc:

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

prog.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++-std=gnu++98结合使用)中,我正在尝试在较新的OS上恢复。它在CentOS 6上可以正常工作,现在我将其修复为在CentOS 7上可以使用,接下来我也将做更新的OS。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...