[英]Does dereference return the object itself or the reference to the object?
假设我有MyObj* ptr;
,并且*ptr
是对某个MyObj
对象的引用,还是它本身就是对象?
如果*ptr
是对象本身,那么为什么执行以下操作是合法的?
MyObj* someFunc(){
MyObj* p;
...
return p;
}
MyObj someOtherMyObjInstance;
*someFunc() = someOtherMyObjInstance.
如果ptr
指向一个有效的对象,则表达式*ptr
计算结果会产生对该对象的左值引用。
从 C++11 标准(强调我的):
5.3.1 一元运算符[expr.unary.op]
1 一元 * 运算符执行间接操作:应用它的表达式应是指向对象类型的指针或指向函数类型的指针,结果是引用表达式指向的对象或函数的左值。
*ptr
是一个表达式。 这个表达式有一个值,这个值有一个类型。 如果ptr
是可解引用的,则计算表达式的值是ptr
指向的对象,其类型为MyObj
,其值类别为“lvalue”。 (这意味着,例如,这个值可以绑定到一个左值引用,并且你可以获取它的地址。)另一方面,如果ptr
引用,那么评估表达式会导致未定义的行为。
代码末尾的赋值只是对作为解引用表达式值的对象的赋值。
请注意,表达式永远不能是引用,因为值的类型始终是对象类型,而不是引用类型。 引用类型对于绑定到值很有用,但它们本身不是值。 评估引用的值是被引用的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.