Anche se probabilmente ti sarà difficile trovare una certezza nello standard, una semplice regola empirica è che tutto ciò che è legittimo in C probabilmente non può essere gettato. [Edit: Il più vicino che sono a conoscenza di una dichiarazione diretta in tal senso è al §15/2, che dice che:
codice che esegue un rimessa espressione è detto di “un'eccezione ;”[...]
Guardando che in senso inverso, il codice che non esegue una rimessa espressione non un'eccezione]
lanciare si limita principalmente a due possibilità:. la prima è invocando UB. Il secondo sta facendo qualcosa di unico per C++, come l'assegnazione ad un tipo definito dall'utente che sovraccarica lo operator =
, o usando un'espressione new
.
Modifica: Per quanto riguarda un compito, ci sono diversi modi in cui può essere lanciato. Ovviamente, lanciando l'operatore incaricato stesso lo farebbe, ma ci sono un buon numero di altri. Ad esempio, se il tipo di origine non corrisponde al tipo di destinazione, è possibile ottenere una conversione tramite un operatore di cast nell'origine o un costruttore nella destinazione, uno dei quali potrebbe generare.
fonte
2012-05-16 16:08:35
è il tipo sempre 'int' e l'RHS sempre un valore letterale? O stai chiedendo del caso generale? (Anche quello che hai mostrato non era un incarico) – Flexo
Grazie per aver catturato quel punto. Ho modificato l'esempio. Alla tua prima domanda, per entrambi, in realtà. –