你会替换吗
const int one = 1;
const int two = 2;
有了这个?
constexpr int one = 1;
constexpr int two = 2;
我的理解是否正确,两个块在语义上是相同的,并且目前只是一个品味问题?
另一方面,作为constexpr
暗示const
,你可能会说,即使在没有什么区别的微不足道的情况下,总是更喜欢限制性更强的形式更一致?
(我理解,当允许右侧的表达式更复杂时,情况会完全改变。因此为了澄清起见,问题仅关注表达式为固定整数的最简单情况。)
我认为你的声明是这样说的const
and constexpr
"语义相同" 应该修改:它们都声明了值不能改变的对象,但是constexpr
还要求初始化表达式在编译时可计算。
现在,如果右侧的表达式无法在编译时计算,则使用constexpr
是不可能的。另一方面,只要初始化器是文字,您就可以could use constexpr
,但请考虑变量的语义是什么:常量变量是否真的代表其值的东西should可以在编译时计算吗?
在软件维护/演化光学中,您可能会随着时间的推移改变初始化变量的方式:今天初始化器是一个文字,明天它可能是一个更复杂的表达式。
无论您以何种方式为其赋值now,你认为i
是否需要用文字以外的任何东西来初始化,并且初始化表达式在编译时可能无法计算?如果是这种情况,那么只需将变量设置为const
,即使您当前正在使用文字初始化它;否则,使其constexpr
.
换句话说,选择最能表达变量语义的限定符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)