встроенные функции c ++ - PullRequest
       11

встроенные функции c ++

0 голосов
/ 29 апреля 2010

я запутался в том, как выполнять встроенные функции в C ++ ....

скажем, эта функция. как бы он превратился во встроенную функцию

int maximum( int x, int y, int z )
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   

Ответы [ 6 ]

8 голосов
/ 29 апреля 2010

Чтобы превратить его в встроенную функцию, вам нужно сделать две вещи:

  1. Объявите это встроенным, используя ключевое слово inline.
  2. Убедитесь, что определение этой функции отображается в каждой единице перевода, где она используется. Обычно это означает, что вы должны поместить все определение функции в заголовочный файл.
4 голосов
/ 29 апреля 2010

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

Альтернативой является сделать вашу функцию шаблоном функции, который часто выдувается в строке:

template<class Val>
Val maximum( Val x, Val y, Val z )
{
   Val max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   
4 голосов
/ 29 апреля 2010

Чтобы опубликовать ответ Нилса как фактический ответ:

inline int maximum(int x, int y, int z)
....
3 голосов
/ 29 апреля 2010

Если это определение функции появляется внутри определения class {}, то оно уже автоматически встроено.

В противном случае, как говорят другие, ставить inline перед.

2 голосов
/ 29 апреля 2010

Чтобы сделать функцию встроенной, используйте ключевое слово inline:

inline int maximum( int x, int y, int z ) // note the inline keyword
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}

Если функция является членом класса / структуры, то простое определение ее внутри класса (в отличие от нее) делает ее встроенной.

Скажем, у вас есть звонок:

int f = maximum(3, 4, 5)

Компилятор может расширить вызов до чего-то вроде:

int max = x;
if ( y > max )
   max = y;
if ( z > max )
   max = z;
int z = max;

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

Подробнее о встроенных функциях и о том, как (и когда) их использовать, вы можете узнать по адресу C ++ FAQ Lite и GotW

1 голос
/ 29 апреля 2010

inline просто говорит компилятору, что вы хотите, чтобы код функции копировался везде, куда он ссылается, он делает код немного быстрее (без затрат на вызов функции), но больше (код копируется). Эта страница более глубока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...