[Questa risposta arriva con quattro anni di ritardo. Chi lo leggerà? Vedremo.]
Er, senza offesa, ma molte delle altre risposte sono errate o comunque fuorvianti, secondo la mia esperienza.
Lo standard C++ non limita il comportamento non definito. Il sistema operativo tuttavia lo vincola normalmente. Motivo: il comportamento non è definito rispetto a C++.
... fare sempre attenzione a non invocare mai un comportamento indefinito.
Sciocchezze. L'esperienza smentisce questo suggerimento. I programmatori C++ invocano spesso inavvertitamente comportamenti non definiti durante i test. A volte lo faccio apposta, solo per vedere cosa succede.
Ora, mi rendo conto che qualcuno pensa che io stia ostentando sciocchezza qui, ma in realtà, il tuo laptop non ha quasi più probabilità di prendere fuoco con un comportamento indefinito rispetto a quello definito. Il comportamento non definito in C++ emette il codice assembly con il comportamento definito. Pensaci. Il comportamento dell'assieme rimane definito. È solo che lo standard C++ non comprende più i meccanismi.
Ci sono volte in cui si desidera provocare un comportamento indefinito solo per vedere cosa sta succedendo in pila.
Se ci si trova in un ambiente in cui è possibile scrivere un definito programma C++ che incendia il laptop, quindi si dovrà fare attenzione in ogni caso; ma il problema principale in questo caso è la mancanza di protezione basata su hardware e/o kernel.
In conclusione, non lasciare che lo standard C++ ti confonda. Ti sta solo informando sui propri limiti di competenza.
di Scott Meyers? –
@ ShumailMohy-ud-Din sì, corretto. Di Scott Meyers – Oleksiy
Fai un esempio. C'è una funzione che cancella un disco rigido. Ora, hai appena assegnato un numero intero a un puntatore a funzione, che sfortunatamente capita di essere l'indirizzo della funzione che cancella il disco rigido. Se si chiama la funzione dereferenziando il puntatore della funzione, l'HDD viene cancellato. – phoxis