LINUX.ORG.RU

C++ virtuals


0

1

С точки зрения логики такое объявление функции немного странно выглядит:

;class A
{
....
inline virtual int func(); { return 0; }
.....
};

Есть частица разумного в сочетании inline и virtual?

Ну если уж на то пошло, для методов, определённых в теле класса, inline и так подразумевается :)

const86 ★★★★★
()

Есть частица разумного в сочетании inline и virtual?

Виртуальный метод инлайниться не должен в принципе. В теории. Типа VMT и прочее :-)

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

> Виртуальный метод инлайниться не должен в принципе.

4.2

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

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Ну если метод вызывать типа Classname::VirtualMethod() или как-то подобно, то да. Только нахрена делать такой метод виртуальным???

no-dashi ★★★★★
()

Такое объявление функции смысла не имеет – точка с запятой между () и { не должна распарситься.

Все методы, определённые внутри определения класса, являются inline и без явного указания.

Объявлять функцию одновременно inline и virtual, вообще говоря, смысл имеет, в том случае, когда её определение содержится в h-файле. Велика вероятность, что скомпилированный код окажется в двух или более объектниках, что означает ошибку линковки. Если же функция объявлена inline, то линкер просто отбросит все варианты, кроме одного.

Miguel ★★★★★
()
Ответ на: комментарий от const86

Ну если уж на то пошло, для методов, определённых в теле класса, inline и так подразумевается :)

это, конечно, в большинстве случаев так, но вот разворачивать или не разворачивать код inline-функции всё равно решает сам компилятор

shty ★★★★★
()
Ответ на: комментарий от mskmsk1985

> А вот это Вы ADIшному компилятору рассказывать будете.

Не буду: компилятор имеет право наплевать на inline :)

const86 ★★★★★
()

Обычное дело, если хочешь держать весь код в хэдере.

anonymous
()

читал в некоторых книгах, что не рекомендуется inline функцию делать виртуальной, в Шилдте по основам c++ про это кажется пишется

g-71
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.