c++ 编译时const int和const double的区别[duplicate]

tvmytwxo  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(115)

此问题在此处已有答案

Initializing a constexpr with a const, -- int vs float(2个答案)
3天前关闭。
在阅读这篇article文章时,我遇到了这个例子:

#include <iostream>
#include <memory>

int main()
{
    const int var1 = 5;
    const double var2 = 8.4;
    std::cout << "var1 " << var1 
              << "   var2 " << var2 <<std::endl;
    constexpr int var3 = var1 + 3;
    constexpr double var4 = var2 + 3.5;
    std::cout << "var3 " << var3 
              << "   var4 " << var4 <<std::endl;

    return 1;
}

字符串
通过编译它,你会得到错误:

pippo.C: In function ‘int main()’:
pippo.C:11:36: error: the value of ‘var2’ is not usable in a constant expression
   11 |     constexpr double var4 = var2 + 3.5;
      |                                    ^~~
pippo.C:7:18: note: ‘var2’ was not declared ‘constexpr’
    7 |     const double var2 = 8.4;
      |


为什么const int变量可以在constexpr中使用,而const double变量不能?
我复制了这个例子,并试图寻找一个以前的问题,但没有成功。

ldfqzlk8

ldfqzlk81#

通常只有constexpr变量(或其生存期在常量计算期间开始的对象)可以用于常量表达式计算。
然而,由于历史原因,在constexpr发明之前,const限定的整数或枚举类型的变量是例外,如果由常量表达式本身初始化,也可以在常量表达式中使用。
如果你想让你的生活更轻松,只需忽略这个异常,并始终将constexpr放在你想要存储编译时常量的变量上。

相关问题