此问题在此处已有答案:
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
变量不能?
我复制了这个例子,并试图寻找一个以前的问题,但没有成功。
1条答案
按热度按时间ldfqzlk81#
通常只有
constexpr
变量(或其生存期在常量计算期间开始的对象)可以用于常量表达式计算。然而,由于历史原因,在
constexpr
发明之前,const
限定的整数或枚举类型的变量是例外,如果由常量表达式本身初始化,也可以在常量表达式中使用。如果你想让你的生活更轻松,只需忽略这个异常,并始终将
constexpr
放在你想要存储编译时常量的变量上。