这是一个简单的代码:
Iterator& operator=(const Iterator& other)
{
node_ = other.node_;
return(*this); // This clearly is a value
}
在此我们承诺该函数将返回对迭代器数据类型的引用。
但我们正在返回一个值 ......这是如何工作的???
在许多例子中都看到了这一点:
T& operator[] (unsigned int index)
{
if (index >= numEle)
return ptr[0]; // This clearly is a value
else
return ptr[index];
}
这是一个非常天真的怀疑,但不能真正理解这是如何工作的.....
答案 0 :(得分:2)
引用T&
表示T
类型的对象。因此,我们始终使用T&
类型的对象初始化引用T
:
int x = 5;
int& r = x;
在您的情况下,返回类型为Iterator&
,因此您返回Iterator
个对象。
您当然可以使用另一个T&
初始化引用T&
,因为其他引用表示T
类型的对象:
int& r2 = r;
答案 1 :(得分:0)
您应该知道数组元素和解引用指针可以用作赋值运算符的左操作数和右操作数。它可以被视为变量和价值。
int arr[5] = {0};
int x = a[2]; // a[2] is on right side of `=`
a[2] = 5; // a[2] is on left side of `=`
int *p;
p = &arr[0];
*p = 10; // *p is on left side of `=`
a[1] = *p; // *p is on right side of `=`
因此,当函数的返回类型只是一个类型时,return
语句返回值。当函数的返回类型为 reference 时,return
语句将 reference 返回给变量。
答案 2 :(得分:0)
不返回一个值,它正如所宣传的那样:返回引用(到一个值)。