其他分享
首页 > 其他分享> > c – constexpr vs const vs constexpr const

c – constexpr vs const vs constexpr const

作者:互联网

const-vs-constexpr-on-variables

关于constexpr的说法是正确的,如果使用double(当然还有浮动).但是,如果将var类型从double更改为整数类型(如int,char等),则一切正常.为什么会这样?

http://ideone.com/DAWABE

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