Как будет компилироваться этот код

Предположим, у нас есть код ниже:

inline void DoSome()
{
cout << "do some" << endl;
}

int main()
{
void (*pDoSome)() = DoSome;

DoSome(); // one
pDoSome(); // two
}

Для приведенного выше кода у нас есть три возможных сценария:

  1. один будет встроен, два не будут
  2. один и два будут встроены
  3. один и два не будут встроены (потому что мы взяли адрес функции)

Теперь я хочу знать, какой из приведенных выше сценариев является правдой?

2

Решение

inline это подсказка компилятору, но это не обязательство. Компилятор должен решить, объявлена ​​ли функция как inline будет на самом деле встроенным, и поэтому любой из двух вызовов может быть или не быть встроенным.

6

Другие решения

Все сценарии возможны, потому что компилятор может оптимизировать, как он хочет. Единственный вариант, чтобы увидеть, что произошло, это посмотреть в выводе ассемблера.

6

По вопросам рекламы [email protected]