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

tvmytwxo  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(143)

此问题在此处已有答案

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

  1. #include <iostream>
  2. #include <memory>
  3. int main()
  4. {
  5. const int var1 = 5;
  6. const double var2 = 8.4;
  7. std::cout << "var1 " << var1
  8. << " var2 " << var2 <<std::endl;
  9. constexpr int var3 = var1 + 3;
  10. constexpr double var4 = var2 + 3.5;
  11. std::cout << "var3 " << var3
  12. << " var4 " << var4 <<std::endl;
  13. return 1;
  14. }

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

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


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

ldfqzlk8

ldfqzlk81#

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

相关问题