Методы класса, определённые прямо в объявлении класса, по умолчанию inline или нет?
Есть header-only класс, наподобие примера ниже, все методы класса, определённы прямо в объявлении класса.
class Class {
public:
void foo() { /*some super cool code*/ }
};
ВОПРОС: Можно ли с уверенностью утверждать, что все методы такого класса по умолчанию рассматриваются как inline? И писать ключевое слове inline нет смысла?
P.S. Ну и да, я хорошо понимаю, что ключевое слово inline - это рекомендация компилятору, а не безусловное правило, на это счет не стоит распыляться в комментах. Суть вопроса выделена жирным.
Прошу внимательно прочитать ВОПРОС перед тем как ответить, и прошу по возможности ссылаться на источники вроде Черновик стандарта C++ и/или на авторитетную литературу. Спасибо!
Ответы (1 шт):
Краткий ответ: да, методы определённые сразу при объявлении неявно являются inline
cppreference говорит, что
A function defined entirely inside a class/struct/union definition, whether it's a member function or a non-member friend function, is implicitly an inline function if it is attached to the global module (since C++20).
Перевод:
Функция, определённая полностью внутри определения class/struct/union, независимо от того, является ли она функцией-элементом или friend функцией, не являющейся элементом, неявно является встроенной функцией, если она присоединена к глобальному модулю (начиная с C++20).
Из черновика стандарта можете открыть:
- стр. 210 9.3.2:
A member function may be defined (8.4) in its class definition, in which case it is an inline member function
- стр. 238 первая строчка 11.3.7