【问题标题】:Why const variable is lvalue in C++? [duplicate]为什么 const 变量在 C++ 中是左值? [复制]
【发布时间】:2020-07-11 13:20:42
【问题描述】:

我已经通过this page开始学习C++。

右值和左值的概念让我很困惑,尤其是这个:

注意:const 变量被视为不可修改的左值。

我不明白 const 变量可以是左值。在实践中是否有将 const 变量用作左值的示例代码?我认为右值和不可修改左值之间没有区别。

【问题讨论】:

  • 您对阻止它成为左值的const 对象到底有什么看法? “左值”对您意味着什么?
  • 我认为“左值”一词的意思是可以在赋值语句的左侧。
  • @JerryJeremiah a[i]*(p+1) 都是左值(除非a 是右值,在这种情况下a[i] 是xvalue)。
  • @JerryJeremiah 你的评论是完全错误的。 lvalues 和 rvalues 是表达式,可以指定一个命名或未命名的对象,并且它们是表达式,它们仅作为编译构造“存在”。你把对象和表达式混在一起了。
  • const 告诉您是否可以修改变量。 rvalue/lvalue 告诉您值类别。右值和左值都可以修改。我真的不明白为什么右值和不可修改的左值是相同的。您正在比较两个并不真正相关的不同事物。

标签: c++


【解决方案1】:

假设你有这样的陈述

const int con=10;     //con is non-modifiable l-value
  • 您不能修改 con 的值。
  • 但是 con 有地址 (&con)。

所以它是不可修改的左值。

代码:

#include<iostream>

int main(void)
{
    const int con=10; //con is non-modifiable l-value
    std::cout<<con;
}

【讨论】:

  • 这不是问题要问的。
  • @L.F 更新的答案可以吗?
  • 这样更好,但是包括左值和右值的定义来解释代码的意义会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 2017-07-08
相关资源
最近更新 更多