Библиотека собеса по C++ | вопросы с собеседований
4.68K subscribers
387 photos
2 videos
168 links
Вопросы с собеседований по C++ и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9ccf302b

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Может ли inline-функция быть рекурсивной в С++?

Да, inline-функция может быть рекурсивной в С++. Однако, компилятор может отказаться от встраивания рекурсивной функции, если это приведет к чрезмерному расходу памяти или времени.

Чтобы заставить компилятор встроить рекурсивную функцию, можно использовать директиву препроцессора #pragma inline_recursion(on).

На картинке выше функция вычисляет факториал числа. При компиляции этой функции с помощью компилятора GCC с опцией -O2 будет получен следующий результат:

factorial(int) at factorial.cc:5

Это означает, что функция factorial будет встроена в код.

Однако, если компилятор считает, что встраивание рекурсивной функции приведет к чрезмерному расходу памяти или времени, он может отказаться от этого. Например, если функция factorial вызывается очень часто, компилятор может решить, что встраивание функции приведет к избыточному дублированию кода. В этом случае компилятор будет использовать обычный вызов функции.
👻 Что такое предкомпилированные заголовки (PCH)?

Принцип работы:

PCH позволяют компилятору обработать заголовочные файлы один раз и сохранить промежуточное представление. При последующих компиляциях используется уже готовый результат вместо повторной обработки.

Необходимые изменения:

• Создание специального заголовочного файла со всеми часто используемыми включениями
• Настройка системы сборки для использования PCH
• Обновление PCH при изменении включенных в него заголовков

Совместимость:

• GCC: -include pch.h с флагом -x c++-header для создания
• Clang: аналогично GCC
• MSVC: директивы #pragma hdrstop и /Yu