c++ - biblioteca - ¿Por qué std:: array:: front y std:: array:: back no son excepto?
return array c++ (1)
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
son).
¿Cuál es la razón de eso?
De cppreference
Hay un caso especial para una matriz de longitud cero
(N == 0)
. En ese caso,array.begin() == array.end()
, que es un valor único. El efecto de llamar afront()
oback()
en una matriz de tamaño cero no está definido.
Entonces, ya que podemos tener una matriz de tamaño 0, la parte front()
y la parte back()
podrían causar una excepción.
Para citar a Sebastian Redl sobre por qué el estándar no obliga al operator[]
, el front
y el back
deben estar marcados como no noexcept
La política estándar de
noexcept
es marcar solo las funciones que no pueden o no deben fallar, pero no las que simplemente se especifican para no lanzar excepciones. En otras palabras, todas las funciones que tienen un dominio limitado (pasan los argumentos incorrectos y obtienes un comportamiento indefinido) no sonnoexcept
, incluso cuando no están especificadas para lanzarlas.