【发布时间】:2014-05-19 16:06:33
【问题描述】:
我正在阅读“SAMS 在 21 天内自学 C++”,遇到了一个我似乎无法理解的示例:
#include<iostream>
using namespace std;
class Counter
{
public:
Counter() {itsVal=0;}
const Counter& operator++ ();
int GetItsVal() {return itsVal;}
private:
int itsVal;
};
const Counter& Counter::operator++()
{
++itsVal;
return *this;
}
int main()
{
Counter i;
Counter a = ++i;
cout << "a: " << a.GetItsVal() << " i: " << i.GetItsVal() << endl;
++a;
cout << "a: " << a.GetItsVal() << " i: " << i.GetItsVal() << endl;
}
为什么++运算符的声明中有一个“&”?我理解这意味着 ++ 运算符的返回类型是一个引用,但它似乎不是对 i 的引用(因为递增 a 不会递增 i)。我注意到如果我删除两个“&”,代码会返回相同的结果,但可能效率不高。
【问题讨论】:
-
不能简单地在 21 天内教 C++。
-
@phresnel 这就像写
std::cout << "Hello World"并说“我现在知道 C++”。 -
" 但它似乎不是对 i 的引用。它引用 i。把它想象成
i.Increment()。你在哪里增加a? -
@phresnel:你错了:25.media.tumblr.com/tumblr_kz4i78InVw1qa501lo1_500.png
-
@rockclimber112358:一般来说,很多专家认为那本书“坏”到“有害”;不仅是因为它的标题。
标签: c++ reference return return-type