Предположим, у нас есть код ниже:
inline void DoSome()
{
cout << "do some" << endl;
}
int main()
{
void (*pDoSome)() = DoSome;
DoSome(); // one
pDoSome(); // two
}
Для приведенного выше кода у нас есть три возможных сценария:
Теперь я хочу знать, какой из приведенных выше сценариев является правдой?
inline
это подсказка компилятору, но это не обязательство. Компилятор должен решить, объявлена ли функция как inline
будет на самом деле встроенным, и поэтому любой из двух вызовов может быть или не быть встроенным.
Все сценарии возможны, потому что компилятор может оптимизировать, как он хочет. Единственный вариант, чтобы увидеть, что произошло, это посмотреть в выводе ассемблера.