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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top