gpt4 book ai didi

c++ - 为什么返回指针而不是变量本身对于具有引用返回类型的函数是正确的

转载 作者:行者123 更新时间:2023-11-28 04:14:44 27 4
gpt4 key购买 nike

考虑以下摘自 Bjarne Stroustrup - C++ 之旅(第 2 版) 的示例类:

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 相同code>) 有一个指向 double double* 的指针类型。

因此,问题是:为什么返回指向 double 的指针 是正确的,尽管方法签名暗示要返回对 double 的引用(变量本身)?

此外,如果我尝试返回取消引用的 *elem[i] 而不是 elem[i],编译器会抛出错误。

最佳答案

根据 [expr.sub]/1 :

A postfix expression followed by an expression in square brackets is a postfix expression. One of the expressions shall be a glvalue of type “array of T” or a prvalue of type “pointer to T” and the other shall be a prvalue of unscoped enumeration or integral type. The result is of type “T”. The type “T” shall be a completely-defined object type. The expression E1[E2] is identical (by definition) to *((E1)+(E2)), except that in the case of an array operand, the result is an lvalue if that operand is an lvalue and an xvalue otherwise. The expression E1 is sequenced before the expression E2.

这里,elemdouble*类型,iint类型。 elem[i] 根据定义等效于 *(elem + i),它是 double 类型的左值。 *elem[i] 尝试取消引用格式错误的 double

关于c++ - 为什么返回指针而不是变量本身对于具有引用返回类型的函数是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56922386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com