gpt4 book ai didi

c++ - object.function().function().function().......这是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 23:32:48 26 4
gpt4 key购买 nike

我无法理解 C++ 语法的工作原理。

#include<iostream>
using namespace std;

class Accumulator{
private:
int value;
public:
Accumulator(int value){this->value=value;}
Accumulator& add(int n){value+=n;}
int get(){return value;};
};

int main(int argc, char* argv[]){
Accumulator acc(10);
acc.add(5).add(6).add(7); //<-----how does this work?????
cout<<acc.get();
return 0;
}

这一行:acc.add(5).add(6).add(7);它是从左到右还是以其他方式工作像 acc.add(5) 先做,然后做 add(6)我不明白。

结果应该是 28。

提前致谢。

编辑:很奇怪,这段代码在 g++ 上编译成功,没有任何错误。我从一些非英语大学 C++ 教科书中得到这段代码。英语不是我的第一语言。

第二次编辑:我现在在使用 -Wall 选项后收到所需的警告。

最佳答案

您的代码无法编译,但如果编译通过,它会从左到右运行。 Add 返回对 Accumulator 的引用(它在您的代码中没有返回值,但它可能应该返回 *this)所以在你打电话之后

acc.add(5)

返回值是对acc的引用,你可以再次调用add

这是一个修改后的示例,添加了 mult 以显示操作顺序:

#include <iostream>
using namespace std;

class Accumulator{
private:
int value;
public:
Accumulator(int value){ this->value = value; }
Accumulator& add(int n){ value += n; return *this; }
Accumulator& mult(int n){ value *= n; return *this; }
int get(){ return value; };
};

int main(int argc, char* argv[]){
Accumulator acc(10);
acc.add(5).add(6).mult(7);
cout << acc.get();
return 0;
}

如果从右到左,结果将是 81,但从左到右,结果将是 147

关于c++ - object.function().function().function().......这是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30169596/

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