Od cppreference
Jest to szczególny przypadek dla macierzy zerowej długości (N == 0)
. W takim przypadku array.begin() == array.end()
, która jest pewną unikalną wartością. Efekt wywołania front()
lub back()
w tablicy o rozmiarze zerowym jest niezdefiniowany.
Więc skoro możemy mieć 0 wielkości tablicę front()
i back()
może spowodować wyjątek
Cytując Sebastian Redl na why the standard doesn't mandate operator[]
, front
and back
be marked noexcept
polityka średnia w sprawie noexcept
jest tylko do funkcji znaku towarowego, które nie mogą lub nie może zawieść, ale nie takie, które po prostu są określone, aby nie rzucać wyjątków. Innymi słowy, wszystkie funkcje, które mają ograniczoną domenę (przekazują błędne argumenty i dostajesz niezdefiniowane zachowanie), nie są noexcept
, nawet jeśli nie są określone do rzucenia.
Dobre pytanie. Musiałyby one warunkowo nie być wyjątkiem, jeśli rozmiar tablicy jest niezerowy. Ale dostawcy mogą wzmocnić nieobecność jako QoI ... –
@KerrekSB Nawet warunkowo jako 'std :: array' nie może być wyspecjalizowany, aby nie mieć tych "noexcept" w przeciwieństwie do 'std :: array '. Niestety standard tego nie zapewnia. –
edmz