我试图判断以下两个语句是否都是ODR-使用变量“x”(int x=2
)。
int c = x;
int y = x+12;
int* z = &x;
我的困惑也是如此:
我有read that如果不“将lvalue-to-rvalue转换应用于x会产生一个不调用非平凡函数的常量表达式”,那么它就是ODR使用的。我知道第三个声明使用ODR使用x
,但是第一个和第二个,不完全确定...
关于声明1:此声明是否正确使用ODR使用x
?
关于陈述2:关于这一特定陈述,我正在考虑上述标准。左值到左值的转换应用于x
以满足+运算符的要求,但是这会产生一个常量表达式吗?从我的理解来看,确实如此,因为它会产生右值2
,我猜这种值不会改变,因此常量。所以我发现常量表达式是一个常量的表达式,这会使得转换的结果与我所学到的一致。问题只是变量x
不是常量,所以对我来说很奇怪,突然出现的事情的结果是常量 ...
答案 0 :(得分:3)