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

标签 c++

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

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

我的困惑也是如此:

我有read that如果不是“对x应用左值到右值转换会产生一个不调用非平凡函数的常量表达式”,那么它是ODR使用的。我知道第三条语句确实 ODR-uses x但第一个和第二个,不完全确定......

关于语句 1:该语句不使用 ODR 是否正确 x

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

最佳答案

常量表达式term of art .

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

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

...那么表达式不能是常量表达式。

关于c++ - 非常量表达式的左值到右值转换的结果是常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48036033/

相关文章:

c++ - Qt:带有关闭、最小化和帮助按钮的 QMainWindow

c++ - 如何在 OS/X 上的编译时确定编译标志?

c++ - 未命名的命名空间导致值不正确

c++ - 在 Linux 上使用 C++ 记录进程终止的原因

c++ - 类型转换重载

c++ - 原子内存排序和中断消息循环

c++ - Qt moveToThread,带参数的信号/槽

c++ - LOWORD() 接收 DWORD(unsigned long)但 WPARAM 是 UINT_PTR(unsigned int)

java - 使用高级消费者和简单消费者的kafka压缩

c++ - 着色器未按预期工作