[关闭]
@CrazyHenry 2018-01-28T17:54:02.000000Z 字数 742 阅读 1221

4.x 箭头运算符返回左值

ccccC++Primer


作者:573xmcgcg
链接:https://www.zhihu.com/question/35776952/answer/64411299
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

举个例子:

  1. #include <iostream>
  2. using namespace std;
  3. struct A
  4. {
  5. int n;
  6. A() = default;
  7. A(int m): n(m) {}
  8. };
  9. int main()
  10. {
  11. A st(5);
  12. A* pst = &st;
  13. cout << st.n << endl; //输出5,st是左值,在该表达式执行完毕后依然存在
  14. st.n = 6; //合法,可以对左值赋值
  15. cout << pst->n << endl; //输出6,pst是左值,在该表达式执行完毕后依然存在
  16. pst->n = 7; //合法,可以对左值赋值
  17. cout << A(8).n << endl; //输出8,A(8)是右值,在该表达式执行完毕后被销毁
  18. A(8).n = 9; //非法,不能对右值赋值
  19. pst = &(A(8)); //非法,不能取右值的地址
  20. return 0;
  21. }

因为指针所指的对象一定是一个左值,所以使用->返回的成员也一定是左值。而对右值对象调用成员调用运算符(.)是合法行为,但是这个被调用的成员在对象被销毁时也一并被销毁,所以整个成员也是右值。
临时量都是右值!所以所有字面量都是右值!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注