Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpExCn 459 of 696 menu
◀ ▶

Условие запрета в C++

Условный noexcept записывают как noexcept(условие) и вычисляет запрет на этапе компиляции.

Часто условие строят через noexcept(expr) для вложенного вызова: обертка наследует поведение переданного действия. Запишем шаблонную обертку с одним условным запретом:

#include <iostream> template<typename F> void run_once(F action) noexcept(noexcept(action())) { action(); } int main() { run_once([]() noexcept { std::cout << "ok\n"; }); return 0; }

Для лямбды без throw условие истинно, поэтому run_once тоже помечается как не бросающая. Если бы действие могло бросать, запрет у обертки снялся бы автоматически.

Объявите шаблон invoke_twice(F fn) с noexcept(noexcept(fn())), дважды вызывающий fn. Передайте лямбду без исключений и выведите "done".

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить