Non c'è operatore cortocircuito coinvolti, in modo che il funzionamento è garantito da chiamare se non può essere ottimizzato via senza rimuovere gli effetti collaterali. Citando lo standard C++ 11:
[...] conformi implementazioni sono tenuti a emulare (solo) il comportamento osservabile della macchina astratta come spiegato seguito.
Questa disposizione viene spesso chiamata la “come-se” regola [...] un'implementazione reale non necessario valutare parte di un'espressione se si può dedurre che il suo valore non viene utilizzato e che non vengono prodotti effetti collaterali che influenzano il comportamento osservabile del programma.
Quindi, qualcosa di simile a
int doSomething() { return 1; }
potrebbe essere ottimizzato via, ma
int doSomething() { std::cout << "d\n"; return 1; }
non è permesso.
Inoltre, dal C++ 11, è possibile scrivere funzioni più sofisticate e comunque valutarle in fase di compilazione utilizzando constexpr
.
Sì, lo standard lo garantisce e un ottimizzatore non è autorizzato a modificare l'effetto semantico. –
Puoi semplicemente scrivere '(void) doSomething();' se vuoi scartare esplicitamente il valore restituito. – Useless