我试图弄清楚以下两个语句是否都使用变量"x"(int x=2
)。
int c = x;
int y = x+12;
int* z = &x;
我的困惑也是如此:
我已经读到,如果不是"对 x 应用左值到右值的转换会产生一个不调用非平凡函数的常量表达式",那么它就是 ODR 使用的。我知道第三种说法确实使用ODRx
但第一句和第二句,不完全确定......
关于声明1:此声明不使用ODRx
是否正确?
关于声明2:关于这一特定声明,我正在研究上述标准。将右值到左值转换应用于x
以满足 + 运算符的要求,但这会产生常量表达式吗?根据我的理解,它确实如此,因为它会产生右值2
,我想它永远不会改变,因此是恒定的。因此,我发现常量表达式是常量表达式非常令人困惑,这将使转换的结果成为我所学到的常量表达式。问题只是变量x
不是恒定的,所以对我来说很奇怪,突然涉及它的事情的结果是恒定的......
常量表达是一个艺术术语。
长话短说,如果表达式使用变量的值,并且该变量是
- 不是参考
- 不
constexpr
,并且 - 不是整数或枚举
const
。则表达式不能是常量表达式。