你会替换吗?
const int one = 1;
const int two = 2;
有了这个?
constexpr int one = 1;
constexpr int two = 2;
我的理解是正确的,两个块在语义上是相同的,并且它目前只是一个品味的问题?
另一方面,作为 constexpr
暗示 const
,你可以说,总是更喜欢限制性更强的形式,即使是在无关紧要的微不足道的情况下也更为一致?
(我知道当右侧的表达式允许更复杂时,情况会完全改变。因此,为了澄清,问题只关注表达式是固定整数的最简单的情况。)
我想你的发言是这么说的 const
和 constexpr
“在语义上是相同的“应该修改:它们都声明了值不能改变的对象,但是 constexpr
还要求初始化表达式在编译时可计算。
现在,如果右侧的表达式无法在编译时计算,则使用 constexpr
是不可能的。另一方面,只要初始化程序是文字,你 可以 使用 constexpr
,但要考虑变量的语义是什么:你的常量变量是否真的代表了其值的东西 应该 在编译时可计算?
在SW维护/演化光学系统中,您可能会改变初始化变量的方式:今天初始化器是文字,明天它可能是更复杂的表达式。
无论您为其分配值的方式如何 现在你觉得吗? i
除了文字之外的其他任何东西都需要初始化,并且初始化表达式在编译时可能无法计算?如果是这种情况,那么只需创建变量即可 const
,即使你正在用文字初始化它;否则,成功 constexpr
。
换句话说,选择最能表达变量语义的限定符。