İlk olarak, C++ 11 yapıcı zincirleme aka constructor delegation hakkında konuşmuyorum.Zincir çağrısı üyesi, adlandırılmış bir nesnenin yapıcısını kapatır
Sınıf üyesi işlevleri kendisine bir başvuru döndürebilir (sınıf) böylece işlev çağrıları zincirlenebilir. (Örneğin, < < operatörünün zincir çağrılarına izin vermek için nasıl çalıştığı gibi.)
Anonim bir nesneyi başlatırken, bu tür zincir çağrıları yapıcıdan çıkabilir.
Zincir aramaları, adlandırılmış bir nesnenin yapıcısından yapılabilir mi? Aşağıdaki "foo a" ve "foo b" satırları derlenmez, bu yüzden farklı bir sözdizimi olup olmadığını merak ediyorum.
foo c = foo{5}.inc().inc();
Hayret, benim derleyici bir sabite, yani bir performans cezası olmadığını optimize:
#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;
}
"hayır". foo (1) 'ifadesidir,' foo a (3) 'ifadesi değildir. Foo a (3) yazmanız gerekecek; a.inc(); ' –