Powiedzmy mamy klasę A
:Zamówienie ewaluacji w wywołaniu łańcucha w C++
class A {
public:
A& func1(int) { return *this; }
A& func2(int) { return *this; }
};
i 2 standlone funkcje:
int func3();
int func4();
teraz w tym kodzie:
A a;
a.func1(func3()).func2(func4());
jest kolejność ewaluacji funkcji zdefiniowano jako func3()
i ?
Według tej odpowiedzi Undefined behavior and sequence points jednym z punktów sekwencji są:
- w wywołaniu funkcji (czy funkcja jest inline), po dokonaniu oceny wszystkich argumentów funkcji (jeśli w ogóle), które trwa miejsce przed wykonaniem jakichkolwiek wyrażeń lub instrukcji w treści funkcji (
§1.9/17
).
Więc nie „ocena wszystkich argumentów funkcji” oznaczają, func3()
musi zostać wywołana przed func4()
jak ocena func1()
argumentów musi nastąpić przed wywołaniem func2()
?
Prawie duplikat [tego] (http://stackoverflow.com/questions/2129230/cout-order-of-all-to-functions-it-prints/2129242#2129242), w skrócie nie. –
@MattMcNabb Tak, dziękuję, naprawiono – Slava
Podobny do bardziej skomplikowanego przykładowego w [Czy ten kod z "The C++ Programming Language" 4. wydanie sekcja 36.3.6 ma dobrze zdefiniowane zachowanie?] (Http://stackoverflow.com/q/27158812/1708801), ale w mojej odpowiedzi podaję wiele szczegółów, które mogą być pomocne w zrozumieniu tego. Istnieje wiele powiązanych ze sobą problemów. –