с отсылкой на стандарт. Уже 3 часа пытаюсь найти.
struct A {
void a();
};
void A::a() {}
Является ли void A::a() {} объявлением?
Думаю, что является. Не уверен, указано ли это где-то непосредственно, но в стандарте есть такой пример для шаблона функции: template <class T> decltype(g(T())) h(); int g(int); template <class T> decltype(g(T())) h() // redeclaration of h() uses the earlier lookup… { return g(T()); } // … although the lookup here does find g(int)
Definition, который не out of class - это же всегда ещё и declaration, как я понимаю. Пример вроде совсем не про это. Или я что-то не так понял?
Да, пример не совсем про методы, но я не думаю, что для определения out of class есть основания считать иначе И есть ещё один подходящий пункт: A redeclaration of a class member outside its class definition shall be a definition, an explicit specialization, or an explicit instantiation Тут однозначно даётся понять, что определения снаружи класса (как минимум) могут являться (ре)декларациями
Действительно. Написано, что переобъявление снаружи может являтся определением.
Я конечно не эксперт, и cppref не стандарт, но если открыть https://en.cppreference.com/w/cpp/language/definition то лично у меня вопросов не возникает
Нет не является
Есть более формальные объяснение?
Интересно услышать мнение Ильи. Мне кажется, он что-то знает...
.
Ну он откуда берётся вообще
Тут https://en.cppreference.com/w/cpp/language/static Заметь слово declares в первом предложении. Если надо стандарт, там есть ссылки и на стандарт
Заметь слово static. Мой кейс с нестатик членами.
Обсуждают сегодня