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