Если я имею, некоторые перегрузили ostream операторы, определили для локальных объектов библиотеки, хорошо, чтобы они перешли к пространству имен станд.? Если я не объявляю их в пространстве имен станд., то я должен использовать using ns:: operator <<
.
Как возможный последующий вопрос, там какие-либо операторы, которые должны перейти к стандартному или глобальному пространству имен?
Согласно Koenig Lookup (стандарт C++ 3.4.2) operator<<
будет искаться в пространствах имен аргументов. Нет необходимости объявлять его в пространстве имен std
.
Стандарт C ++ явно запрещает вам объявлять собственные конструкции в пространстве имен std.
operator << (..., MyClass)
должен находиться в том же пространстве имен, что и MyClass
. Вы должны думать об этом как о части интерфейса MyClass
, даже если это (обязательно) функция, не являющаяся членом.
Несколько ссылок:
Вообще, плохая практика - объявлять что-либо (типы, операторы и т.д. ...) частью пространства имен, которое вам не принадлежит. Это может иметь неожиданные последствия для людей, использующих вашу библиотеку. Лучшим решением является определение собственного пространства имен и импорт как std
, так и вашего пространства имен, когда вам нужно объединить решения.