cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

basic_string_view noexcept #460

Closed NN--- closed 3 years ago

NN--- commented 3 years ago

<Описание вашей идеи> Как известно конструктор basic_string_view , а также remove_prefix не являются noexcept. Нет никаких причин, кроме исторических, не объявить их как noexcept. В принципе весь класс мог бы быть noexcept.

<Примеры, где ваша идея будет полезна. Чем больше примеров и чем большую аудиторию они охватывают - тем лучше> Полезность noexcept в местах без исключений вполне очевидна. Получаем больше оптимизаций от компилятора.

apolukhin commented 3 years ago

Эти методы обладают неопределённым поведением, если им передать не \0 терминированную строку. Комитет подобгые местоды с UB на некоторых значениях называет методами с "узким контрактом" (narrow contract).

Все методы с narrow contract не помечаются в стандарте как noexcept. (Есть правда пара досадных исключений, которые уже невозможно исправить)