![](/img/trans.png)
[英]Why return a pointer to a variable on the heap instead of the variable itself in C++
[英]Why returning pointer instead of variable itself is correct for functions with reference return type
請考慮以下示例類,該類取自Bjarne Stroustrup-A Tour of C ++(第二版) :
class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { }
double& operator[](int i) { return elem[i]; }
int size() { return sz; }
private:
double* elem;
int sz = 0;
};
據我所了解,在double& operator[]
方法主體中, elem[i]
(與elem + i
相同)具有一種類型為double double*
的指針。
因此,問題是:盡管方法簽名暗示了要返回的double (變量本身)的引用,但為什么返回正確的double指針呢?
此外,如果我嘗試返回取消引用的*elem[i]
而不是elem[i]
,則編譯器將引發錯誤。
后綴表達式后跟方括號中的表達式是后綴表達式。 這些表達式之一應為類型“
T
數組”的glvalue或類型為“指向T
指針”的prvalue,另一個表達式應為無作用域枚舉或整數類型的prvalue。 結果為“T
”類型。 類型“T
”應為完全定義的對象類型。 表達式E1[E2]
(根據定義)與*((E1)+(E2))
,除了在數組操作數的情況下,如果該操作數是一個左值,則結果是一個左值,否則為x值。 表達式E1
在表達式E2
之前排序。
在這里, elem
是double*
類型,而i
是int
類型。 根據定義, elem[i]
等效於*(elem + i)
,它是double
類型的左值。 *elem[i]
嘗試取消引用格式不正確的double
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.