2015-01-04 2 views
-5

Я узнал, что функции в классе должны быть «inline» из книги Но, я не могу понять, почему ... Эта книга была недостаточной Я не родной динамик на английском языке, и поэтому я очень беден при поиске в Интернете, описываемый Engilsh и веб-сайты моей страны очень закрыт для студентов, как мне поэтому, пожалуйста, ответьте мнефункции в классе (C++)

Я думаю Если функция (не встроенный) были в классе, стек стека функции (некоторые адреса, аргументы и т. д.) будут создаваться повторно всякий раз, когда компилятор ссылается на эту функцию , поэтому поэтому функции в классе должны быть встроенными? Извините за мой плохой английский

+1

функция-членов не имеет быть встроенным. Как объясняет ответ Базиля, иногда они автоматически помечены 'inline', но нет необходимости писать тела членов-членов внутри класса на C++ (программисты Java могут найти это очень странно). Кроме того, [ключевое слово C++ 'inline' фактически не имеет ничего общего с оптимизацией inlining] (http://stackoverflow.com/a/3212635/103167). –

ответ

1

В определении C++, если функция-член объявлена ​​внутри class понимаются компилятором как inline

Обратите внимание, что inline (в том числе неявных один для функций объявленной внутриclass) всего лишь Подсказка компилятору, который может или не может фактически быть inline, который функционирует на некоторых (или всех или всех) его сайтах. Inlining - это всегда оптимизация, которую компилятор может реализовать или нет, и он часто также позволяет использовать другие оптимизации.

Кстати, некоторые компиляторы могут встраивать функции, не помеченные как inline, и это может быть даже сделано через единицу компиляции с так называемым link-time-optimization (для g++ компиляции и связи с -flto -O2)

Смежные вопросы