¿Por qué std::array::front y std::array:: back no están excluidos?


Soy nuevo en el uso del especificador noexcept y no entiendo por qué std::array::front y std::array::back no se declaran noexcept (mientras que std::array::begin y std::array::end lo son).

¿Cuál es la razón de eso?

Author: Angew, 2015-09-17

1 answers

De cppreference

Existe un caso especial para un array de longitud cero (N == 0). En ese caso, array.begin() == array.end(), que es algún valor único. El efecto de llamar a front() o back() en una matriz de tamaño cero es indefinido.

Así que ya que podemos tener una matriz de tamaño 0 front() y back() podría causar una excepción

Citar Sebastian Redl en ¿por qué la norma no impone operator[], front y back ser marcado noexcept

El la política de standard en noexcept es solo marcar las funciones que no pueden o no deben fallar, pero no aquellas que simplemente se especifican para no lanzar excepciones. En otras palabras, todas las funciones que tienen un dominio limitado (pasan los argumentos incorrectos y obtiene un comportamiento indefinido) no son noexcept, incluso cuando no se especifican para lanzar.

 14
Author: NathanOliver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:30:56