Я только что прочитал, что в стандартной версии C++ 11 спецификации исключений устарели. Ранее я думал, что указать, что могут бросить ваши функции, - это хорошая практика, но, видимо, не так.Почему спецификации исключений C++ не проверяются во время компиляции?
После прочтения Herb Stutter's well-cited article, я не могу не задаться вопросом: почему на самом деле спецификации спецификации исключений реализованы так, как они есть, и почему комитет решил отказаться от них вместо того, чтобы их проверяли во время компиляции? Почему компилятор даже разрешает бросать исключение, которое не появляется в определении функции? Для меня это звучит так, как будто вы говорите: «Вы, вероятно, не должны указывать свой тип возвращаемой функции, потому что, когда вы укажете int f()
, но внутри него ваша программа, вероятно, сработает». (То есть, где концептуальное отличие от сильного печатая?)
(Из-за отсутствия поддержки спецификации исключений в typedef
с, учитывая, что синтаксис шаблона, вероятно, Тьюринг-полной, реализуя это звучит достаточно просто.)
Важно отметить, что компиляторы не всегда могут видеть определение. –
Я думаю, что большая причина в том, что он сломает много хорошего кода шаблона. –
(И если вы хотите сделать это дальше, почему компилятор даже разрешит функции доступа к переменным, которые не отображаются в объявлении функции?) –