Il comportamento del programma è specificato dal momento che non sappiamo l'ordine di valutazione degli argomenti della funzione, dalla draft C++ standard1.9
programma di esecuzione del paragrafo 3:
alcuni altri aspetti e le operazioni della Le macchine astratte sono descritte in questo standard internazionale come non specificato (ad esempio, l'ordine di valutazione degli argomenti di una funzione). Ove possibile, questo standard internazionale definisce un insieme di comportamenti consentiti. [...]
e tutti gli effetti collaterali dagli argomenti sono in sequenza prima che la funzione viene inserito, dalla sezione 5.2.2
funzione chiamata paragrafo 8:
[Nota: Le valutazioni del postfix l'espressione e le espressioni di argomento sono tutte non correlate l'una rispetto all'altra. Tutti gli effetti collaterali delle valutazioni delle espressioni degli argomenti vengono sequenziati prima che la funzione venga immessa (vedere 1.9). Nota -end]
Per quanto riguarda C
entrambi i punti sono coperti nel C99 draft standard nella sezione 6.5.2.2
chiama Funzione paragrafo 10:
L'ordine di valutazione della funzione designatore, gli argomenti attuali, e Le sottoespressioni all'interno degli argomenti effettivi non sono specificate, ma c'è un punto di sequenza prima della chiamata effettiva.
Così sia C
e C++
si può finire con uno o f(0,0)
f(42,0)
.
fonte
2013-08-29 16:50:17
La domanda chiede anche se 'g (& p)' funge da punto di sequenza. Ci sono due punti di sequenza nella valutazione di 'g (& p)': Tra la valutazione di 'g' e la valutazione di' & p', e tra la valutazione delle "espressioni complete" '* p = 42;' e il '0' nel' ritorno'. Ma nessuno dei due ordina la valutazione dell'argomento 'p' rispetto alla valutazione di' g (& p) '. –
@EricPostpischil: ottimo commento. :-) – Nawaz