非常量表达式的左值到右值转换的结果是常数吗?



我试图弄清楚以下两个语句是否都使用变量"x"(int x=2)。

  1. int c = x;
  2. int y = x+12;
  3. int* z = &x;

我的困惑也是如此:

我已经读到,如果不是"对 x 应用左值到右值的转换会产生一个不调用非平凡函数的常量表达式",那么它就是 ODR 使用的。我知道第三种说法确实使用ODRx但第一句和第二句,不完全确定......

关于声明1:此声明不使用ODRx是否正确?

关于声明2:关于这一特定声明,我正在研究上述标准。将右值到左值转换应用于x以满足 + 运算符的要求,但这会产生常量表达式吗?根据我的理解,它确实如此,因为它会产生右值2,我想它永远不会改变,因此是恒定的。因此,我发现常量表达式是常量表达式非常令人困惑,这将使转换的结果成为我所学到的常量表达式。问题只是变量x不是恒定的,所以对我来说很奇怪,突然涉及它的事情的结果是恒定的......

常量表达是一个艺术术语。

长话短说,如果表达式使用变量的值,并且该变量是

  1. 不是参考
  2. constexpr,并且
  3. 不是整数或枚举const

。则表达式不能是常量表达式。

最新更新