Почему пространство имен и класс имеют одинаковый синтаксис в C++?

Пространства имен и классы - это две разные концепции в C++. Пространство имен существует только для предотвращения конфликта имен, вместо этого класс является определяемым пользователем типом.

Чем они пользуются одинаково :: синтаксис?

Например:

namespace::function();
class::function();

2 ответа

Решение

Обе области имен и классы образуют области. Scope - это концепция, которая работает довольно единообразно как с пространствами имен, так и с классами: есть область видимости класса и область видимости пространства имен в C++ (а также другие виды областей). И с тех пор :: является оператором разрешения области видимости, нет ничего необычного в том, что он используется с пространствами имен и классами синтаксически подобным образом.

Потому что классы, как и пространства имен, вводят (обычно именуемую) область видимости. Оператор разрешения области действия работает так же с классами и пространствами имен. Не будет никакого преимущества в добавлении большего количества операторов для того же.

Если классы не вводят область действия, возникнут проблемы:

struct buffer {
    int size, *data;
};

struct list {
     node* head;
     int size; // oops, name conflict!
};

Очевидно, что классы должны вводить область действия для своих членов.

Другие вопросы по тегам