Почему пространство имен и класс имеют одинаковый синтаксис в C++?
Пространства имен и классы - это две разные концепции в C++. Пространство имен существует только для предотвращения конфликта имен, вместо этого класс является определяемым пользователем типом.
Чем они пользуются одинаково ::
синтаксис?
Например:
namespace::function();
class::function();
2 ответа
Обе области имен и классы образуют области. Scope - это концепция, которая работает довольно единообразно как с пространствами имен, так и с классами: есть область видимости класса и область видимости пространства имен в C++ (а также другие виды областей). И с тех пор ::
является оператором разрешения области видимости, нет ничего необычного в том, что он используется с пространствами имен и классами синтаксически подобным образом.
Потому что классы, как и пространства имен, вводят (обычно именуемую) область видимости. Оператор разрешения области действия работает так же с классами и пространствами имен. Не будет никакого преимущества в добавлении большего количества операторов для того же.
Если классы не вводят область действия, возникнут проблемы:
struct buffer {
int size, *data;
};
struct list {
node* head;
int size; // oops, name conflict!
};
Очевидно, что классы должны вводить область действия для своих членов.