在阅读这篇文章时,我进入了这个例子:
#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
变量不能使用??
我复制了该示例并尝试查找之前的问题,但没有成功。
通常只有
constexpr
变量(或生命周期在常量求值期间开始的对象)可用于常量表达式求值。
但是,由于
constexpr
发明之前的历史原因,const
限定的整型或枚举类型的变量有一个例外,如果它们由常量表达式本身初始化,则也可以在常量表达式中使用。
如果你想让你的生活更轻松,只需忽略此异常并始终将
constexpr
放在要存储编译时常量的变量上。