Ответ 1
От cppreference
Существует специальный случай для массива нулевой длины
(N == 0)
. В этом случаеarray.begin() == array.end()
, что является некоторым уникальным значением. Эффект вызоваfront()
илиback()
в массиве нулевого размера равен undefined.
Итак, поскольку мы можем иметь массив размером 0 front()
и back()
, может вызвать исключение
Чтобы процитировать Себастьян Редл на , почему стандарт не имеет мандата operator[]
, front
и back
быть отмечены noexcept
Стандартная политика
noexcept
заключается в том, чтобы отмечать только те функции, которые не могут или не должны терпеть неудачу, но не те, которые просто указываются не для исключения исключений. Другими словами, все функции, имеющие ограниченный домен (передать неправильные аргументы и вы получите поведение undefined), не являютсяnoexcept
, даже если они не заданы для throw.