首先,我不是在谈论C++11构造函数链(即构造函数委托)。
类成员函数可以返回对自己(即该类)的引用,因此可以进行函数调用链。(就像cout<<运算符如何允许链式调用一样。)
在实例化匿名对象时,这种链式调用可以发生在构造函数之外。
能否在命名对象的构造函数中进行链式调用?下面的“foo a”和“foo b”行不会编译,因此我想知道是否有不同的语法。
#include <iostream>
using namespace std;
class foo {
public:
foo(int x) : val{x} { };
foo& inc() { ++val; return *this; }
int getVal() { return val; };
private:
int val;
};
int main() {
cout << foo(1).inc().getVal() << endl; // prints 2
cout << foo{2}.inc().inc().inc().inc().getVal() << endl; // prints 6
foo a(3).inc(); // error: expected ‘,’ or ‘;’ before ‘.’ token
foo b{4}.inc(); // error: expected ‘,’ or ‘;’ before ‘.’ token
cout << a.getVal() << endl;
cout << b.getVal() << endl;
}
foo(1)
是一个表达式,foo a(3)
不是一个表达式。你需要编写foo a(3); a.inc();
。 - M.M