"constexpr变量在初始化时使用const变量"。

28 浏览
0 Comments

"constexpr变量在初始化时使用const变量"。

这个问题已经有了答案:

一个const变量的值是否可用于常量表达式,取决于变量类型

constexpr和const的区别是什么?

为什么下面这个例子可以无错误编译?

#include 
int main(){
  const int var1 = 2;
  constexpr int var2 = var1 * 5;
return 0;
}

根据理论:

“变量”不是常量表达式(它们的值在编译时未知)

我使用的是gcc编译器,可能每个编译器行为不同吗?

那么在这个例子中,如何知道 const var1 是在编译时知道的?

我在其他 话题中发现了有关constconstexpr的讨论,但我还是不理解。

admin 更改状态以发布 2023年5月21日
0
0 Comments

为什么下面的示例可以编译而没有问题?\n\n任何constexpr变量的完整表达式都必须是常量表达式,即在编译时可求值。您的初始化程序var * 5是一个常量表达式,因为var是const修饰的整数类型,它本身是由整数常量表达式初始化的;此外,5也是整数常量表达式,因此,完整表达式var * 5也是常量表达式。因此,没有任何东西会导致程序不合法。

0