2017-01-13 11 views
-4

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

Than Почему они используют тот же самый :: синтаксис?

Например:

namespace::function(); 
class::function(); 
+2

Я предлагаю вам выбрать [хорошую книгу на C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) и прочитать главу, которая охватывает сферу действия ('::'). –

+0

Сколько голосов? Я подумал, что это интересный вопрос, и его уже не спрашивали о stackoverflow. – iianfumenchu

+0

Действительно, downvotes кажутся слишком суровыми. –

ответ

6

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

2

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

Если классы не ввести сферу, будет беда:

struct buffer { 
    int size, *data; 
}; 

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

Очевидно, что классы должны ввести простор для своих членов.