假设头文件中有以下类定义:
class foo
{
public:
static float constexpr MY_VALUE{100.f};
};
在我的CPP文件中,我有这个:
float constexpr foo::MY_VALUE;
但是,如果foo::MY_VALUE
永远不会使用ODR,我应该定义它吗?在不使用ODR的情况下定义它会伤害什么吗?为类静态constexpr变量提供这样的定义是一个很好的经验法则吗?
答案 0 :(得分:2)
这是一个基于意见的IMO,但试图保持技术......从定义你不必这样做,除非它是ODR使用,所以它似乎微不足道。唐'吨。此外,用户始终可以为他们需要的上下文提供定义。
至于经验法则,也可以参考:
3.2一个定义规则。 p3
变量x的名称显示为潜在评估的表达式ex,除非x满足,否则使用odr 出现在常量表达式(5.19)中的要求,如果x是对象,则ex是元素 表达式e的潜在结果集合,其中应用了左值到右值的转换(4.1) e,或e是丢弃值表达式(第5条)。 [...]
取自c++14 draft。
所以我想说:如果你预测你的常量会在非常量上下文中使用,我会提供一个方便的定义。如果没有,那么不是。但这是一个必须做出的设计决定。