簡體   English   中英

為什么對於引用返回類型的函數,返回指針而不是變量本身是正確的

[英]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] ,則編譯器將引發錯誤。

[expr.sub] / 1

后綴表達式后跟方括號中的表達式是后綴表達式。 這些表達式之一應為類型“ T數組”的glvalue或類型為“指向T指針”的prvalue,另一個表達式應為無作用域枚舉或整數類型的prvalue。 結果為“ T ”類型。 類型“ T ”應為完全定義的對象類型。 表達式E1[E2] (根據定義)與*((E1)+(E2))除了在數組操作數的情況下,如果該操作數是一個左值,則結果是一個左值,否則為x值。 表達式E1在表達式E2之前排序。

在這里, elemdouble*類型,而iint類型。 根據定義, elem[i]等效於*(elem + i) ,它是double類型的左值。 *elem[i]嘗試取消引用格式不正確的double

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM