这是一个简单的计数器.默认情况下add,调用该方法将私有变量递增count1.我Counter从函数中返回类,以便它可以被链接,但是当我查看输出时,它给出了1,当我期望它为3时,因为我调用add了三次.
#include <iostream>
#include <vector>
using std::cout;
class Counter {
public:
Counter() : count(0) {}
Counter add() {
++count; return *this;
}
int getCount() {
return count;
}
private:
int count;
};
int main() {
Counter counter;
counter.add().add().add();
cout << counter.getCount();
}
Run Code Online (Sandbox Code Playgroud)
AnT*_*AnT 13
链接成语的整体思路是基于访问相同的,原来在每个链接调用对象.这通常通过从每个修改方法返回对原始对象的引用来实现.这就是你add应该如何宣布的
Counter &add() { // <- note the `&`
++count; return *this;
}
Run Code Online (Sandbox Code Playgroud)
这样一来,每个应用程序add在你的链接表达将修改同一个,原来的对象.
在原始代码中,您将返回原始对象的临时副本add.因此,add(在第一个之后)的每个附加应用程序都在临时副本上工作,修改该副本并生成另一个临时副本.所有这些临时副本在完整表达结束时消失得无影无踪.因此,add除了第一个调用之外,你永远不会看到任何调用的效果.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |