c – constexpr vs const vs constexpr const
作者:互联网
const-vs-constexpr-on-variables
关于constexpr的说法是正确的,如果使用double(当然还有浮动).但是,如果将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;
}
更新:以下行是错误的,我的意思是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中找到.尤其是:
…an lvalue-to-rvalue conversion (4.1) unless it is applied to a
non-volatile glvalue of integral or enumeration type that refers to a
non-volatile const object with a preceding initialization, initialized
with a constant expression…
int是一个整数类型,而double不是.
标签:c,c14,constexpr 来源: https://codeday.me/bug/20191008/1874428.html