是否应该定义静态constexpr类成员变量,即使它们不是ODR使用的?

时间:2015-11-17 14:04:09

标签: c++ c++11

假设头文件中有以下类定义:

class foo
{
public:
    static float constexpr MY_VALUE{100.f};
};

在我的CPP文件中,我有这个:

float constexpr foo::MY_VALUE;

但是,如果foo::MY_VALUE永远不会使用ODR,我应该定义它吗?在不使用ODR的情况下定义它会伤害什么吗?为类静态constexpr变量提供这样的定义是一个很好的经验法则吗?

1 个答案:

答案 0 :(得分:2)

这是一个基于意见的IMO,但试图保持技术......从定义你不必这样做,除非它是ODR使用,所以它似乎微不足道。唐'吨。此外,用户始终可以为他们需要的上下文提供定义。

至于经验法则,也可以参考:

  

3.2一个定义规则。 p3

     

变量x的名称显示为潜在评估的表达式ex,除非x满足,否则使用odr   出现在常量表达式(5.19)中的要求,如果x是对象,则ex是元素   表达式e的潜在结果集合,其中应用了左值到右值的转换(4.1)   e,或e是丢弃值表达式(第5条)。 [...]

取自c++14 draft

所以我想说:如果你预测你的常量会在非常量上下文中使用,我会提供一个方便的定义。如果没有,那么不是。但这是一个必须做出的设计决定。