inline функция



Автор АбвГдеЁж задал вопрос в разделе Другие языки и технологии

Ошибка компоновки inline функции класса С++ и получил лучший ответ

Ответ от Zhodzky[гуру]
Я врядли могу подсказать непосредственно по вопросу т. к. не разделяю реализацию с объявлением inline функций.
Просто хочу заметить пару моментов:
1) Если в объявлении класса есть реализация функции, то это автоматически означает что функция inline. Так что непосредственно както выделять что функция inline в таких случаях смысла нет. Другими словами, все функции класса реализованные при объявлении являются inline (не в том смысле что они обязательно будут встраиваться компилятором в места их вызова (иногда это вообще невозможно), а в том смысле как будто вы написали inline перед функцией).
2) Делать inline имеет смысл только ОЧЕНЬ маленькие функции. Обычно это 1, максимум 2 строки. Такие функции имхо лучше оставлять в объявлении, выносить их смысла нет.
Другими словами - то что вы нагуглили на МОЙ взгляд будет наилучшим решением.
P.S. Добавление: глянул стандарт языка, вот что написано - "An inline function shall be defined in every translation unit in which it is odr-used and shall have exactly
the same definition in every case (3.2). [ Note: A call to the inline function may be encountered before its
definition appears in the translation unit. —end note ] If the definition of a function appears in a translation
unit before its first declaration as inline, the program is ill-formed. If a function with external linkage is
declared inline in one translation unit, it shall be declared inline in all translation units in which it appears;
no diagnostic is required. An inline function with external linkage shall have the same address in all
translation units. A static local variable in an extern inline function always refers to the same object.
A string literal in the body of an extern inline function is the same object in different translation units.
[ Note: A string literal appearing in a default argument is not in the body of an inline function merely
because the expression is used in a function call from that inline function. —end note ] A type defined
within the body of an extern inline function is the same type in every translation unit."
Похоже это отвечает на ваш вопрос, если я правильно его понял...
zhodzky
Просветленный
(34535)
Ну я не гуру языка. А с чего такая необходимость вынести реализацию inline функции в cpp файл? Обычно такие функции как я уже написал занимают 1-2 строчки и никак не мешают в h файле.

Ответ от Ёлавик Кононенко[гуру]
Научить чему? inline функция на то и inline, что она не доступна компоновщику. Чего вы хотите, определитесь. Либо она inline и тогда ее определение должно быть доступно в каждой единице трансляции, где она используется, либо она не inline, тогда декларируете в заголовке, а определяете в исходнике. Вы же говорите, я хочу inline функцию, но чтобы она была не inline.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Ошибка компоновки inline функции класса С++
C++ на Википедии
Посмотрите статью на википедии про C++
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*