为什么这种链接方法不起作用?

tem*_*boy 5 c++

这是一个简单的计数器.默认情况下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除了第一个调用之外,你永远不会看到任何调用的效果.

  • @MartyE:在这种情况下,它将是`counter.add() - > add() - > add()`.第一个仍然是`.`. (3认同)