const-vs-constexpr-on-variables
这个家伙对constexpr说的是正确if double
的(float
当然)。但是,如果将var类型从double
int,char等整数类型更改,则一切正常。为什么会这样呢?
int main()
{
const int PI1 = 3;
constexpr int PI2 = 3;
constexpr int PI3 = PI1; // works
static_assert(PI1 == 3, ""); // works
const double PI1__ = 3.0;
constexpr double PI2__ = 3.0;
constexpr double PI3__ = PI1__; // error
static_assert(PI1__ == 3.0, ""); // error
return 0;
}
Update
:以下行是一个错误,我的意思是 PI3__ = PI1__
constexpr double PI3__ = PI1; // I meant PI1__
问题:
为什么const int = 3
编译时间是常数,但const double = 3.0
不是?
我有什么理由要constexpr const int val;
用完constexpr int val
吗?他们似乎都做的完全一样。
从注释看来,OP似乎在要求标准报价,标准报价定义const int
为编译时常量,但const double
并非如此。
有关详细信息,请参见5.19 Constant Expressions
。特别是:
...左值到右值转换(4.1),除非将其应用于整数或枚举类型的非易失性glvalue,该整数或枚举类型引用具有先前初始化且使用常量表达式初始化的非易失性const对象...
int
是整数类型,而double
不是。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句