Diciamo che abbiamo classe A
:Ordine di valutazione in catena di invocazione in C++
class A {
public:
A& func1(int) { return *this; }
A& func2(int) { return *this; }
};
e 2 standlone funzioni:
int func3();
int func4();
ora in questo codice:
A a;
a.func1(func3()).func2(func4());
è È stato definito l'ordine di valutazione delle funzioni func3()
e func4()
?
Secondo questa risposta Undefined behavior and sequence points uno dei punti di sequenza sono:
- ad una chiamata di funzione (se la funzione è in linea), dopo la valutazione di tutti gli argomenti di funzione (eventuali) prende posizionare prima dell'esecuzione di qualsiasi espressione o istruzione nel corpo della funzione (
§1.9/17
).
Così fa "la valutazione di tutti gli argomenti di funzione" significa, func3()
deve essere chiamato prima func4()
la valutazione di func1()
argomenti deve avvenire prima della chiamata del func2()
?
Quasi un duplicato di [questo] (http://stackoverflow.com/questions/2129230/cout-order-of-call-to-functions-it-prints/2129242#2129242), in breve n. –
@MattMcNabb sì, grazie, corretto – Slava
Simile al più complicato esemplificato in [Questo codice da "The C++ Programming Language" nella quarta sezione 36.3.6 ha un comportamento ben definito?] (Http://stackoverflow.com/q/27158812/1708801) ma nella mia risposta fornisco molti dettagli che potrebbero essere utili per capirlo. Ci sono un sacco di problemi interconnessi. –