繁体   English   中英

取消引用返回对象本身还是对象的引用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM