Aunque probablemente sea difícil encontrarle una garantía en el estándar, una simple regla general es que cualquier cosa que sea legítima en C probablemente no pueda arrojarse. [Editar: Lo más cerca que estoy al tanto de que una declaración directa en este sentido es en el § 15/2, que dice que:
código que se ejecuta un saque de banda expresión se dice que es “una excepción ”[...]
cuanto a que a la inversa, código que no ejecuta un saque de banda expresión no lanzar una excepción]
lanzar se limita fundamentalmente a dos posibilidades. la primera es invocando a UB. El segundo es hacer algo exclusivo de C++, como asignar a un tipo definido por el usuario que sobrecarga operator =
, o usar una expresión new
.
Editar: En lo que respecta a una tarea, hay bastantes maneras en que puede arrojar. Obviamente, lanzar el propio operador de asignación lo haría, pero hay un buen número de otros. Solo por ejemplo, si el tipo de fuente no coincide con el tipo de destino, puede obtener una conversión a través de un operador de conversión en la fuente o un constructor en el destino, cualquiera de los cuales podría arrojar.
es el tipo siempre 'int' y el RHS siempre es literal? ¿O preguntas sobre el caso general? (También lo que mostraste no era una tarea) – Flexo
Gracias por captar ese punto. Edité el ejemplo. Para su primera pregunta, para ambos, en realidad. –