Есть ли список стандартных библиотечных интерфейсов c ++ 11, для которых требуются исключения? - PullRequest
7 голосов
/ 12 сентября 2011

Из чтения редакции N3242 проекта c ++ 11 выясняется, что некоторые компоненты интерфейсов стандартной библиотеки (в частности, многопоточность и блокировка) зависят от обработки исключений.

Поскольку я много работаю с исключениями отключено , мне интересно, какие компоненты / функции библиотеки будут (практически или логически) непригодными для использования без включенной обработки исключений?

Ответы [ 2 ]

4 голосов
/ 13 сентября 2011

Прежде всего (просто как напоминание), отключение исключений и RTTI являются специфичными для компилятора расширениями, которые стандарт не учитывает.

Поскольку стандартная библиотека обычно привязана к компилятору, может быть вашей реализацией Стандартной библиотеки специально предназначенной для этого (и, в частности, для справиться с new, возвращая нулевые указатели вместо повышения std::bad_alloc).

Следовательно, то, что вы просите, бессмысленно. Обратитесь к документации вашей собственной библиотеки для получения полного списка.

При этом Стандарт действительно гарантирует, что ряд операций никогда не сработает. Я не знаю ни одной операции, которая поглощает исключения, я бы предположил, что большинство из них действительно безопасно использовать как есть.

Например, все алгоритмы должны быть безопасными.

Тем не менее, еще раз, я могу только рекомендовать прочитать документацию вашей реализации.

1 голос
/ 15 октября 2011

Этот вопрос более месяца, и без ответа.

Я даю ответ, который можно считать вики сообщества, добавляйте к нему по мере необходимости.

  • std::thread Раздел 30.2.2 . Переходная. Абстракция реализована с использованием собственных реализаций.

  • std::mutex, std::recursive_mutex, std::timed_mutex, std::recursive_timed_mutex. Раздел 30.4.1 , непереходный, если вы предоставляете собственную блокировку без исключений (через BasicLockable, Lockable, TimedLockable). Абстракция реализована с использованием собственных реализаций.

  • std::condition_variable Раздел 30,5 . Переходная. Абстракция реализована с использованием собственных реализаций.

примечание: будет больше.

...