roadman wrote:А вот ещё вопрос по С++:
Могу я определить фукцию класса и virtual и inline одновременно, ну что-то типа:
class A
{
public:
inline virtual int get_type() { return 0; }
};
Да, можешь. В данном конкретном примере слово 'inline' излишне, ибо функция, определенная внутри определения класса и так является 'inline', но ошибки в этом нет.
Вопрос(ы):
1. Если не могу, то почему?
N/A, ибо можешь.
2. Если могу, то будет ли inline работать или компилятор проигнорирует inline?
Встраиваемость 'inline' функций в С++ проявляется на per-call basis. Т.е. один вызов одной и той же функции может встроиться, а другой - нет. Какой вызов встроится, а какой нет - зависит от условий, в которых происходит вызов, а также от способностей компилятора.
В случае виртуальной функции, в тех ситуациях, в которых компилятор не в состоянии определить конкретную целевую функцию в compile-time, вызов будет косвенным и встраиваться, разумеется, не будет.
В тех же ситуациях, когда конкретноая целевая функция ясна уже в compile-time (известен динамический тип объекта или функция вызвана через квалифицированное имя) ничто не мешает компилятору выполнить встраивание. Большинство компиляторов так и поступает.