Significa “Return ottimizzazione valore” causare un comportamento indefinito?
-
22-09-2019 - |
Domanda
questo articolo di Wikipedia sottolineato da uno dei repliers alla seguente domanda:
C ++ costruttore di copia, provvisori e copiare la semantica
Mi sono imbattuto in questa linea
A seconda del compilatore, e le impostazioni del compilatore, il programma risultante può visualizzare una delle seguenti uscite:
Questo non qualificarsi per un comportamento indefinito? So che l'articolo dice Depending on the compiler and settings
ma voglio solo chiarire questo.
Soluzione
No, non è un comportamento indefinito. comportamento indefinito ha una definizione specifica nello standard (principalmente: "comportamento, come potrebbe verificarsi in conseguenza dell'uso di un costrutto erronea programma o dati errati, per cui questa norma internazionale non impone requisiti") In questo caso, il comportamento non è specificato, ma non definito.
La differenza è che ogni esecuzione di qualsiasi cosa con un comportamento indefinito rende tutti i comportamenti del programma indefinito (cioè tutto può succedere). Con questo particolare comportamento non specificato, solo una delle due cose possono accadere: o il costruttore di copia viene eseguito, o non è così
.Altri suggerimenti
No. Il comportamento è definita come una delle uscite della lista. comportamento indefinito include demoni volanti fuori del vostro naso.
Si veda: nasale Demons
indefinito comportamento è molto diverso da implementazione definito il comportamento , che è ciò che è coinvolto qui.
Dipende cosa si intende per indefinita. Credo che ciò che altri hanno detto qui - dalla definizione degli standard documentano l'uso. Ma so anche che quando qualcuno dice "questo o quello, non sto dicendo che" ci penso come comportamento non definito.
Non è un grosso problema, anche se, come non dovrebbe mai causare un errore. Quando si definisce alcuni metodi, si sono tenuti a definirli seguenti convenzioni particolari -. Si tratta di una sorta di contratto implicito fra voi, il compilatore e le persone che utilizzeranno e la manutenzione del codice
In questo caso, se si ottiene una copia ecc costrutto o il comportamento ottimizzato, l'effetto dovrebbe essere lo stesso - il chiamante riceve il valore desiderato. Se il costruttore di copia è la stampa "Ciao Mondo!" o ha altri effetti collaterali inappropriate, non sta attuando il comportamento previsto per un costruttore, quindi la colpa è vostra per la rottura del contratto.