如何解决在一个.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 举报,一经查实,本站将立刻删除。