constexpr vs const vs constexpr const

const-vs-constexpr-on-variables

这个家伙对constexpr说的是正确if double的(float当然)。但是,如果将var类型从doubleint,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;
}

Update:以下行是一个错误,我的意思是 PI3__ = PI1__

constexpr double PI3__ = PI1;  // I meant PI1__

问题:

  1. 为什么const int = 3编译时间是常数,但const double = 3.0不是?

  2. 我有什么理由要constexpr const int val;用完constexpr int val吗?他们似乎都做的完全一样。

谢尔盖·A

从注释看来,OP似乎在要求标准报价,标准报价定义const int为编译时常量,但const double并非如此。

有关详细信息,请参见5.19 Constant Expressions特别是:

...左值到右值转换(4.1),除非将其应用于整数或枚举类型的非易失性glvalue,该整数或枚举类型引用具有先前初始化且使用常量表达式初始化的非易失性const对象...

int是整数类型,而double不是。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

静态const和constexpr变量有什么区别?

来自分类Dev

constexpr const vs constexpr变量?

来自分类Dev

为什么不能从constexpr函数访问const数组?

来自分类Dev

G ++ vs Clang:constexpr和const的行为不一致

来自分类Dev

constexpr比const更“恒定”吗?

来自分类Dev

constexpr上的Intel vs GCC

来自分类Dev

const char * vs const char []

来自分类Dev

类范围常量:const vs静态const

来自分类Dev

用const char * const解释constexpr

来自分类Dev

const constexpr char *与constexpr char *

来自分类Dev

constexpr const char *与constexpr const char []

来自分类Dev

为什么非const std :: array :: operator []不是constexpr?

来自分类Dev

继承自std :: true_type vs静态constexpr const bool成员

来自分类Dev

将Constexpr强制转换为const char []

来自分类Dev

constexpr字符串vs const字符串

来自分类Dev

'Constexpr'与'extern const'。哪个优先?

来自分类Dev

const有效,但不能constexpr

来自分类Dev

GNU const / pure属性与constexpr

来自分类Dev

const vs非const内联变量

来自分类Dev

#define vs const global

来自分类Dev

如果constexpr vs如果常量

来自分类Dev

将constexpr()与非const条件组合

来自分类Dev

const param vs非const param

来自分类Dev

const struct {x} vs struct {const x}

来自分类Dev

G ++ vs Clang:constexpr和const的行为不一致

来自分类Dev

constexpr上的Intel vs GCC

来自分类Dev

const和constexpr指针之间的区别

来自分类Dev

Funktionsargument const char * vs. const char **

来自分类Dev

constexpr字符串vs const字符串