R.7.1.2 Спецификации функций

R.7.1.2 Спецификации функций

Некоторые спецификации можно использовать только в описании функций.

спецификация-fct:

 inline

 virtual

Спецификация inline подсказывает транслятору, что необходимо произвести подстановку тела функции вместо обычной реализации вызова функции. Подсказка может игнорироваться. В случае функций, не являющихся членами, спецификация inline дополнительно устанавливает для функции внутреннее связывание (§R.3.3). Функция (§R.5.2.2, §R.8.2.5), определенная в описании класса, имеет по умолчанию спецификацию inline.

Функция-член со спецификацией inline должна иметь в точности такое же определение в каждой единице трансляции, где она появляется.

Функцию-член не обязательно явно описывать со спецификацией inline при описании класса, чтобы она трактовалась как подстановка. Если спецификации inline не было, связывание будет внешним, если только определение со спецификацией inline не появится перед первым вызовом функции.

class X {

public:

 int f();

 inline int g(); // X::g() имеет внутреннее связывание

 int h();

};

void k(X* p)

{

 int i = p-›f(); // теперь X::f() внешнее связывание

 int j = p-›g();

 //…

}

inline int X::f() // ошибка: вызов до определения

 // как inline

{

 //…

}

inline int X::g()

{

 //…

}

inline int X::h() // теперь X::h() имеет внутреннее связывание

{

 //…

}

Спецификация virtual может использоваться только в описаниях нестатических функций-членов при описании класса (см. §R.10.2).