Avi*_*mar 0 c++ operator-overloading
我遇到了以下程序:
class Counter {
protected:
unsigned int count;
public:
Counter(): count(0) {}
Counter(int c): count(c) {}
unsigned int get_count() { return count; }
Counter operator++() { return Counter(++count); }
};
Run Code Online (Sandbox Code Playgroud)
最后一个成员函数做什么(Counter(++count)
)?
我想你想operator++
为你的课程实现,这应该实现为:
Counter & operator++()
{
++count;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是它做了什么?它预先增量.现在你可以编写++counter
并调用上面的运算符重载,并在内部将变量递增count
1.
示例:
Counter counter(1);
++counter;
std::cout << counter.get_count() << std::endl;
++(++counter);
std::cout << counter.get_count() << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
2
4
Run Code Online (Sandbox Code Playgroud)
您的原始代码有什么作用?
如果您尝试使用原始实现运行上述代码operator++
,它将打印以下内容:
2
3
Run Code Online (Sandbox Code Playgroud)
那是因为你正在创建另一个你要返回的临时对象,当你编写++(++counter)
外部预增量时会增加临时对象.所以外部预增量不会改变值counter.count
.
即使你写++(++(++(++counter)))
,它也相当于++counter
.
比较这里的输出:
注意++(++counter)
不会调用未定义的行为.