В C ++ вы можете объявить функцию как inline
, только если код функции доступен во время компиляции (если вы действительно хотите встроить этот код функции). Таким образом, вы не можете реализовать тело функции внутри скомпилированной статической библиотеки, которая не будет доступна при использовании этой статической библиотеки. Если вы сделаете это, этот вызов функции будет похож на обычный вызов функции.
От cppreference :
2) Определение встроенной функции должно присутствовать в
блок перевода, к которому он доступен (необязательно до
точка доступа).
Хотя вы можете определить свою функцию inline
в заголовке статической библиотеки (как функция только заголовка).
Кстати, помните, что inline
это просто предложение. компилятор решит встроить или нет. Обычно это происходит, когда вы компилируете код с включенной оптимизацией, но особенно если вы не оптимизируете свой код, вы обычно видите, что функции не встроены.
В качестве примера, проверьте эту небольшую статическую библиотеку, содержащую 2 файла:
test.h
#pragma once
inline int sum(int a, int b)
{
return a + b;
}
int sub(int a, int b);
test.cpp
int sub(int a, int b)
{
return a - b;
}
Когда вы используете эту библиотеку, sum
будет встроен, а sub
будет обычным обычным вызовом. Помните, что вы даже можете определить sub
как inline
в заголовке библиотеки (без его тела), и он все равно будет похож на обычный вызов функции.