gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:07 25 4
gpt4 key购买 nike

这是一个简单的计数器。默认情况下,正在调用方法 add 以将私有(private)变量 count 递增 1。我从函数中返回 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();

}

最佳答案

链接习语的整个想法是基于在每个链接调用中访问相同原始对象。这通常是通过从每个修改方法返回对原始对象的引用 来实现的。这就是您的 add 应该如何声明

    Counter &add() { // <- note the `&`
++count; return *this;
}

这样,链式表达式中的每个 add 应用程序都会修改相同原始 对象。

在您的原始代码中,您从 add 返回原始对象的临时拷贝。因此,add 的每个附加应用程序(在第一个应用程序之后)都在临时拷贝上工作,修改该拷贝并生成另一个临时拷贝。所有这些临时拷贝在完整表达式结束时消失得无影无踪。因此,除了第一个调用之外,您永远看不到任何 add 调用的效果。

关于c++ - 为什么这种链接方法不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12011730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com