Da cppreference
V'è un caso speciale per un array di lunghezza zero (N == 0)
. In tal caso, array.begin() == array.end()
, che è un valore univoco. L'effetto di chiamare front()
o back()
su un array di dimensioni pari a zero non è definito.
Quindi, dal momento che possiamo avere un array di dimensioni 0 front()
e back()
potrebbe causare un'eccezione
Per citare Sebastian Redl su why the standard doesn't mandate operator[]
, front
and back
be marked noexcept
La politica del standard su noexcept
è quello di funzioni marchio solo che non possono o non deve fallire, ma non quelli che semplicemente sono specificati per non gettare eccezioni. In altre parole, tutte le funzioni che hanno un dominio limitato (passano gli argomenti sbagliati e si ottiene un comportamento indefinito) non sono noexcept
, anche quando non sono specificate per il lancio.
Buona domanda. Dovrebbero essere condizionatamente non eccetto che la dimensione dell'array sia diversa da zero. Ma i fornitori possono rafforzare la noncuranza come QoI ... –
@KerrekSB Neanche condizionatamente come 'std :: array' potrebbe essere specializzato a non avere quei 'noexcept' contrari a' std :: array '. Sfortunatamente lo standard non lo prevede. –
edmz