Во-первых, я не говорю о создании конструктора конструктора C++ 11 aka.Функция, вызывающая цепочку, отключает конструктор именованного объекта
Функции члена класса могут возвращать ссылку на себя (класс), так что вызовы функций могут быть закодированы. (Как работает оператор 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(); ' –