从同一个类的成员函数返回一个对象

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))?

Naw*_*waz 6

我想你想operator++为你的课程实现,这应该实现为:

Counter & operator++()
{
   ++count;
   return *this;
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是它做了什么?它预先增量.现在你可以编写++counter并调用上面的运算符重载,并在内部将变量递增count1.

示例:

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) 不会调用未定义的行为.