const int 和 const double 在编译时的区别

问题描述 投票:0回答:1

在阅读这篇文章时,我进入了这个例子:

#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
变量不能使用??

我复制了该示例并尝试查找之前的问题,但没有成功。

c++ constants constexpr
1个回答
0
投票

通常只有

constexpr
变量(或生命周期在常量求值期间开始的对象)可用于常量表达式求值。

但是,由于

constexpr
发明之前的历史原因,
const
限定的整型或枚举类型的变量有一个例外,如果它们由常量表达式本身初始化,则也可以在常量表达式中使用。

如果你想让你的生活更轻松,只需忽略此异常并始终将

constexpr
放在要存储编译时常量的变量上。

© www.soinside.com 2019 - 2024. All rights reserved.