我很难理解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) --先加(6),然后加(6),我不明白。
结果应该是28。
提前谢谢。
编辑:奇怪的是,这段代码在g++上编译成功,没有任何错误。我是从一本非英语大学的c++课本上学到的。英语不是我的第一语言。
第二编辑:使用-Wall选项后,我现在得到所需的警告。
发布于 2015-05-11 13:59:50
您的代码不编译,但如果编译了,它将从左到右工作。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。
发布于 2015-05-11 14:26:02
这被称为方法链,通常出现在Fluent接口模式中。
每个方法调用(acc.add(5))返回连续的方法调用(.add(7))可以操作的引用或指针。
https://stackoverflow.com/questions/30169596
复制相似问题