Почему все используют объявления незакрепленного пространства имен (т. е. std:: а не ::std::)?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему все используют объявления незакрепленного пространства имен (т. е. std:: а не ::std::)?

Сообщение Anonymous »

Мне кажется, что использование незакрепленных пространств имен просто вызывает проблемы позже, когда кто-то добавляет новое пространство имен, которое имеет то же имя, что и пространство имен корневого уровня, и загадочным образом меняет смысл целого ряда программ. Итак, почему люди всегда говорят std:: вместо ::std::. Действительно ли они хотят сказать: «Я хочу использовать любой удобный std, а не корневой».

Вот пример того, что я означает:

В fred/Foo.h:

Код: Выделить всё

#include 

namespace fred {

class Foo {
public:
void aPublicMember(const std::string &s);
};

} // end namespace fred
В fred/Bar.h:

Код: Выделить всё

namespace fred {
namespace std {  // A standard fred component

class string { // Something rather unlike the ::std::string
// ...
};

} // namespace std

class Bar {
public:
void aPublicMember(std::string &s);
};

} // namespace fred
В oops.cpp:

Код: Выделить всё

#include 
#include "fred/Bar.h"
#include "fred/Foo.h"  // Oops, the meaning of Foo is now different.
Это то, чего хотят люди, или я что-то упускаю?

И, возможно, вы говорите, что вам следует просто никогда не называйте пространство имен std. И это все хорошо, но как насчет другого пространства имен корневого уровня? Должно ли любое пространство имен корневого уровня, которое кто-либо когда-либо где-либо определяет, всегда быть закрытым для имени подпространства имен?

Чтобы внести ясность, я не буду рассматривать ни один ответ, который говорит мне, что std особенный, потому что я использовал его только в качестве примера. Я говорю об общей проблеме и использую std в качестве подсказки, чтобы ее проиллюстрировать, хотя признаю, что это довольно поразительная подсказка.

Подробнее здесь: https://stackoverflow.com/questions/166 ... td-not-std
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»