Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Ключевое слово class перед класс-мембером

#cpp


Считается ли ключевое слово class перед класс-мембером как своего рода forward declaration
класса, чтобы компилятор не беспокоился, что за "идентификатор".



Идентичны ли эти фрагменты кода?

class Foo
{
private:
    class Bar* a;
};  


и

class Bar;
class Foo
{
private:
    Bar* a;
};

    


Ответы

Ответ 1



Да, идентичны. Согласно 3.3.2 Point of declaration [basic.scope.pdecl], для таких объявлений, которые называются elaborated-type-specifier, имя объявляется во внешней области видимости. Это можно продемонстрировать таким кодом: struct Foo { struct Bar* a; }; struct Bar {}; int main() { Bar b; Foo f; f.a = &b; } Однако для объявлений вида class name;, имя объявляется в той же области видимости, например struct Foo { struct Bar; }; struct Foo::Bar {};

Комментариев нет:

Отправить комментарий