【发布时间】:2019-06-26 15:04:09
【问题描述】:
我们有一些类将静态数据成员暴露为公共成员,例如
class A{
public:
static const string NAME;
//Other class specific methods
};
类似的B类和其他一些类。
如果我必须创建类似的地图
static const map<string, string> versionMap = {{A().NAME, "Aa"},
{B().NAME, "Bb"}
};
在创建 versionMap 时创建的类的临时对象,是否保证始终具有定义的行为?
【问题讨论】:
-
因为它是静态的,你不需要一个对象来访问它。只需使用
A::NAME、B::NAME等即可。但这并不能解决静态变量初始化顺序的问题。 -
我会尽可能避免使用动态分配的数据结构作为静态成员。请记住,它们不能用于 constexpr 工作......为什么不将其设为
std::string_view?