Подтвердить что ты не робот

Будет ли исключение С++ перестанет функционировать из строя?

Предположим, что у меня есть очень простая функция, которую я ожидаю от компилятора. Но мне может понадобиться исключить исключение из-за недопустимого ввода, может ли это остановить компилятор от функции?

4b9b3361

Ответ 1

Компилятор может отказаться от inline по любой причине. gcc перечисляет причины, по которым он мог бы не включать функцию, но исключение бросания не входит в их число. Кроме того, опция -Winline заставит компилятор выдать предупреждение, если он не может встроить функцию, которую вы отметили как встроенную. Вы можете попробовать это и посмотреть, не делаете ли вы что-либо, чтобы предотвратить inlining.

Ответ 2

Для компилятора вполне разумно и справедливо встроить функцию, которая бросает.

Ответ 3

Я просто столкнулся с этой ситуацией с MSVC версии 19. Функция, которая генерирует исключение, не будет вставлена ​​при компиляции для x86. Если я заменил throw на exit(1) или, если я скомпилирую для x86-64, он будет просто вложенным.