Предположим, что у меня есть очень простая функция, которую я ожидаю от компилятора. Но мне может понадобиться исключить исключение из-за недопустимого ввода, может ли это остановить компилятор от функции?
Будет ли исключение С++ перестанет функционировать из строя?
Ответ 1
Компилятор может отказаться от inline по любой причине. gcc перечисляет причины, по которым он мог бы не включать функцию, но исключение бросания не входит в их число. Кроме того, опция -Winline заставит компилятор выдать предупреждение, если он не может встроить функцию, которую вы отметили как встроенную. Вы можете попробовать это и посмотреть, не делаете ли вы что-либо, чтобы предотвратить inlining.
Ответ 2
Для компилятора вполне разумно и справедливо встроить функцию, которая бросает.
Ответ 3
Я просто столкнулся с этой ситуацией с MSVC версии 19. Функция, которая генерирует исключение, не будет вставлена при компиляции для x86. Если я заменил throw
на exit(1)
или, если я скомпилирую для x86-64, он будет просто вложенным.