【发布时间】:2020-10-15 10:23:30
【问题描述】:
我正在尝试从不同文件中不同类的另一个 const static 字段的状态(的一部分)初始化我的 static const 字段的状态。
在一个简化的例子中:
// object.h
class Object {
public:
Object(std::string s)
: s(s)
{}
private:
std::string s;
};
// a.h
#include "object.h"
class A {
public:
static const Object o;
};
// a.cpp
#include "a.h"
const Object A::o { "ObjectToCopyFrom" };
// b.h
#include "object.h"
class B {
public:
static const Object o;
}
// b.cpp
#include "a.h"
const Object B::o { A::o };
根据我的经验,我发现B::o 无法从A::o 初始化。它可以编译,但 std::string B::o 是空的。我做错了什么,或者这根本不可能?或者static const字段相互依赖有没有更好的设计策略?
【问题讨论】:
-
请对静态初始化命令失败做一些研究。
static对象的初始化顺序在 translation units 之间是不确定的。 -
“或者对于相互依赖的静态 const 字段有更好的设计策略吗?” 当然,完全移除依赖并在单独的命名空间/类中定义它们,两者都是A 类和 B 类依赖。
-
@Someprogrammerdude 谢谢你的信息,我会的。我想我在翻译单元方面还有一些工作要做。
-
@AdrianMole 谢谢这正是我想要的,很高兴看到这在更新的 c++ 中是可能的!
标签: c++ static initialization constants field