Причина, по которой operator[]
не помечен как noexcept
, заключается в том, что он имеет "узкий контракт", т. Е. Значение индекса должно находиться в диапазоне 0 ... N-1
. Если переданное значение не находится в этом диапазоне, поведение не определено, и (кто знает?) Функция может выдать.
Стандарт довольно непротиворечив в том, что не следует помечать вещи как «узкие контракты» как исключение. Это неофициально известно как «правило Лакоса».
Обратите внимание, что библиотека IMPLEMENTERS может свободно добавлять noexcept
, если стандарт не указывает это, если они выбирают. Я подумаю о добавлении этого в libc ++.
[Позже: оказывается, что libc ++ делает это уже для string
и string_view
, но не vector
, array
или deque
]
[Позже: libc ++ теперь помечает operator[]
как noexexcept для vector
/ array
и deque
.]