Вот пример того, что я означает:
В fred/Foo.h:
Код: Выделить всё
#include
namespace fred {
class Foo {
public:
void aPublicMember(const std::string &s);
};
} // end namespace fred
Код: Выделить всё
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
Код: Выделить всё
#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
Мобильная версия