La norma lo consente?Lo standard C++ consente l'aggiunta di due numeri interi (tipo fondamentale int) per generare un'eccezione C++?
Non penso che lo faccia. Qualcuno lo fa. Ho bisogno di persone intelligenti per dimostrarlo in errore.
La norma lo consente?Lo standard C++ consente l'aggiunta di due numeri interi (tipo fondamentale int) per generare un'eccezione C++?
Non penso che lo faccia. Qualcuno lo fa. Ho bisogno di persone intelligenti per dimostrarlo in errore.
Sì, lo fa. L'overflow di interi con segno è un comportamento non definito, quindi potrebbe accadere qualsiasi cosa (inclusa l'eccezione generata).
Come nota a margine, devo dire che è improbabile che ciò accada (ma sicuramente possibile) per la maggior parte delle implementazioni; come cita il C++ 11 standard in una nota al paragrafo 5/4:
Se durante la valutazione di un'espressione, il risultato non è matematicamente definita o meno nell'intervallo valori rappresentabili per il suo tipo, il comportamento non è definito. [Nota: la maggior parte delle implementazioni esistenti di C++ ignorano l'integer overflow. Trattamento della divisione per zero, formando un resto utilizzando un divisore zero e tutte le eccezioni a virgola mobile variano tra le macchine e sono generalmente regolabili mediante una funzione di libreria. Nota -end]
As hvd mentions in the comments, tuttavia, alcune implementazioni consentono di fornire gestori personalizzati per integer overflow, e quei gestori possono buttare.
La regola generale è tutto ciò che è può essere scritto in C non può e non deve generare un'eccezione ...
Di conseguenza, non sarebbe.
Come dice Andy, questo comportamento non è definito in modo che tutto possa accadere. In teoria il computer potrebbe anche farti una tazza di caffè e portare il tuo cane a fare una passeggiata. Comunque se tu fossi in un colloquio di lavoro, ti suggerirei di dirgli di no :)
Le regole mal concepite fanno male ai pollici. Non puoi scrivere "it" in C perché l'overflow firmato in C non è permesso, proprio come in C++. –
'sizeof ('a')' può essere scritto in C ma risulta in vaulue diversi (e lo fanno sulla maggior parte delle piattaforme).Inoltre, il comportamento non definito su C potrebbe comportare un'eccezione: provare la divisione intero per zero, che si traduce in un'eccezione hardware su molte piattaforme (dato che non è un'eccezione C++ ...). –
'lui' ... chi? – iammilind
@iammilind: persona a caso sull'interwebz. – rubenvb
obbligatorio xkcd: https://xkcd.com/386/ – heinrich5991