@CrazyHenry
2018-01-28T09:54:02.000000Z
字数 742
阅读 1453
ccccC++Primer
- Author:李英民 | Henry
- E-mail: li
_yingmin@outlookdotcom- Home: https://liyingmin.wixsite.com/henry
快速了解我: About Me
转载请保留上述引用内容,谢谢配合!
作者:573xmcgcg
链接:https://www.zhihu.com/question/35776952/answer/64411299
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
举个例子:
#include <iostream>using namespace std;struct A{int n;A() = default;A(int m): n(m) {}};int main(){A st(5);A* pst = &st;cout << st.n << endl; //输出5,st是左值,在该表达式执行完毕后依然存在st.n = 6; //合法,可以对左值赋值cout << pst->n << endl; //输出6,pst是左值,在该表达式执行完毕后依然存在pst->n = 7; //合法,可以对左值赋值cout << A(8).n << endl; //输出8,A(8)是右值,在该表达式执行完毕后被销毁A(8).n = 9; //非法,不能对右值赋值pst = &(A(8)); //非法,不能取右值的地址return 0;}
因为指针所指的对象一定是一个左值,所以使用->返回的成员也一定是左值。而对右值对象调用成员调用运算符(.)是合法行为,但是这个被调用的成员在对象被销毁时也一并被销毁,所以整个成员也是右值。
临时量都是右值!所以所有字面量都是右值!
