簡體   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