В C ++ 03 вы можете поместить это туда, но если это правда, что модные вещи не выдают, это в основном просто документация.Он может влиять или не влиять на производительность, добавляя эквивалент try / catch(...) { std::unexpected(); }
вокруг вызовов функции: зависит от реализации, сможет ли она сделать это, не влияя на производительность.
Если вы планируете использовать noexcept
оператор (5.3.7) в C ++ 0x, тогда внезапно становится целесообразным иметь спецификации исключений без выбрасывания, так что оператор дает «правильный» ответ.Я на самом деле не знаю, для чего нужен оператор noexcept
, но если есть умное обобщенное использование для него, например, алгоритмы, которые становятся более эффективными, когда что-то не выбрасывает, то я думаю, что это станет необходимым для маркировки функцийкак исключение броска, чтобы получить любую выгоду.
Например:
void foo() noexcept;
void bar();
template <void(*FUNC)()>
void generic_thing() {
if (noexcept(FUNC()) {
// this won't throw, perhaps we can somehow take advantage of that
FUNC();
} else {
// this might throw
FUNC();
}
}
Спецификации исключений старого стиля ( динамические-исключения-спецификации ) устарели вC ++ 0x (и бессмысленно в C ++ 03).