Phi*_*ßen 11 c++ const constexpr c++11
你会替换吗?
const int one = 1;
const int two = 2;
Run Code Online (Sandbox Code Playgroud)
有了这个?
constexpr int one = 1;
constexpr int two = 2;
Run Code Online (Sandbox Code Playgroud)
我的理解是正确的,两个块在语义上是相同的,并且它目前只是一个品味的问题?
另一方面,正如constexpr
所暗示的那样const
,你可以争辩说,总是更喜欢更具限制性的形式更为一致,即使是在无关紧要的微不足道的情况下也是如此?
(我理解当右侧的表达式允许更复杂时,情况会完全改变.因此,为了澄清,问题只关注表达式是固定整数的最简单的情况.)
And*_*owl 13
我觉得你的声明说,const
和constexpr
" 具有相同的语义 "应修改为:它们都宣称对象,它们的值不能改变,但constexpr
也需要初始化表达式是在编译时间计算.
现在,如果在编译时无法计算右侧的表达式,则使用constexpr
是不可能的.另一方面,只要初始化器是一个文字,你可以使用constexpr
,但要考虑变量的语义是什么:你的常量变量真的代表其值应该在编译时可计算的东西吗?
在SW维护/演化光学系统中,您可能会改变初始化变量的方式:今天初始化器是文字,明天可能是更复杂的表达式.
不管你现在的样子分配一个值,现在,你认为i
永远都需要通过别的比文字进行初始化,并且初始化表达式可能无法在编译时间计算的?如果是这种情况,那么只需创建变量const
,即使您当前正在使用文字初始化它; 否则,成功constexpr
.
换句话说,选择最能表达变量语义的限定符.