Предположим, у меня есть очень простая функция, и я ожидаю, что компилятор ее встроит. Но мне может понадобиться создать исключение, если я увижу недопустимый ввод, помешает ли это компилятору встроить функцию?
Будет ли функция исключения C++ останавливаться от встроенной функции?
Ответы (3)
Компилятор может отказаться от встраивания по любой причине. gcc перечисляет причины, по которым он может не встраивать функцию, но генерация исключений не является среди них. Кроме того, опция -Winline заставит компилятор выдать предупреждение, если он не может встроить функцию, которую вы пометили как встроенную. Вы можете попробовать это и посмотреть, делаете ли вы что-нибудь, чтобы предотвратить встраивание.
person
David Nehme
schedule
21.09.2011
Для компилятора вполне разумно и допустимо встраивать функцию, которая выдает исключение.
person
David Heffernan
schedule
21.09.2011
Я только что столкнулся с этой ситуацией с MSVC версии 19. Функция, которая выдает исключение, не будет встроена при компиляции для x86. Если я заменю throw на exit(1) или скомпилирую для x86-64, он отлично встроится.
person
Alexey B.
schedule
12.11.2017
Поведение, при котором функция не встраивается в оператор try, по-видимому, задокументировано здесь: docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/
- person Michał W. Urbańczyk; 16.04.2018
... Inlining of specified subprogram failed due to the presence of a C++ exception handler: utills::ScopeFile<utills::MpiAbbortOnError>::~ScopeFile(). Обратите внимание, что то, на что он жалуется, даже не является исключением, но похоже, что с деструкторами нужно обращаться таким же образом. Эти предупреждения появляются на этапе компоновки, когда я делаюxlC object1.o object2.o -o my_binary(xlC — это компилятор IBM). - person Anton Daneyko   schedule 07.02.2013