¿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?
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 afront()
oback()
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 sonnoexcept
, incluso cuando no se especifican para lanzar.
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