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

时间:2017-12-30 17:00:50

标签: c++

我试图判断以下两个语句是否都是ODR-使用变量“x”(int x=2)。

  1. int c = x;
  2. int y = x+12;
  3. int* z = &x;
  4. 我的困惑也是如此:

    我有read that如果“将lvalue-to-rvalue转换应用于x会产生一个不调用非平凡函数的常量表达式”,那么它就是ODR使用的。我知道第三个声明使用ODR使用x,但是第一个和第二个,不完全确定...

    关于声明1:此声明是否正确使用ODR使用x

    关于陈述2:关于这一特定陈述,我正在考虑上述标准。左值到左值的转换应用于x以满足+运算符的要求,但是这会产生一个常量表达式吗?从我的理解来看,确实如此,因为它会产生右值2,我猜这种值不会改变,因此常量。所以我发现常量表达式是一个常量的表达式,这会使得转换的结果与我所学到的一致。问题只是变量x 不是常量,所以对我来说很奇怪,突然出现的事情的结果是常量 ...

1 个答案:

答案 0 :(得分:3)

常量表达式term of art

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

  1. 不是参考
  2. 不是constexpr
  3. 不是const整数或枚举
  4. ...然后表达式不能是常量表达式。