为什么对于引用返回类型的函数,返回指针而不是变量本身是正确的 考虑下面的Bjarne Stroustrup类示例——C++(第二版):
据我所知,在为什么对于引用返回类型的函数,返回指针而不是变量本身是正确的 考虑下面的Bjarne Stroustrup类示例——C++(第二版):,c++,pointers,reference,C++,Pointers,Reference,据我所知,在double&operator[]方法体中,elem[I](与elem+I相同)具有指向doubledouble*的指针类型 所以,问题是:为什么返回指向double的指针是正确的,尽管方法签名意味着返回对double的引用(变量本身) 此外,如果我尝试返回取消引用的*elem[I]而不是elem[I],编译器将抛出一个错误: 后缀表达式后跟方括号中的表达式是 后缀表达式。其中一个表达式应为glvalue类型 “T数组”或“指向T的指针”类型的PR值,以及其他 应为无范围枚举或整数类
double&operator[]
方法体中,elem[I]
(与elem+I
相同)具有指向doubledouble*
的指针类型
所以,问题是:为什么返回指向double的指针是正确的,尽管方法签名意味着返回对double的引用(变量本身)
此外,如果我尝试返回取消引用的*elem[I]
而不是elem[I]
,编译器将抛出一个错误:
后缀表达式后跟方括号中的表达式是
后缀表达式。其中一个表达式应为glvalue类型
“T数组”或“指向T的指针”类型的PR值,以及其他
应为无范围枚举或整数类型的PR值。这个
结果的类型为“T
”。类型“T
”应为完全定义的
对象类型表达式E1[E2]
与
*((E1)+(E2))
,除了在数组操作数的情况下
如果操作数是左值和x值,则结果是左值
否则表达式E1
在表达式之前排序
E2
这里,
elem
是类型double*
,而i
是类型int
elem[i]
根据定义相当于*(elem+i)
,它是double
类型的左值*elem[i]
尝试取消对格式不正确的双精度的引用。如果您询问返回elem[i]代码>,不返回指针。[]
运算符对指针进行去引用。不,elem[i]
与*(elem+i)
相同。星号很重要。该死,我不知道。谢谢你的解释!
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;
};