Какое пространство имен делает оператор <<(поток), переходят в?

Если я имею, некоторые перегрузили ostream операторы, определили для локальных объектов библиотеки, хорошо, чтобы они перешли к пространству имен станд.? Если я не объявляю их в пространстве имен станд., то я должен использовать using ns:: operator <<.

Как возможный последующий вопрос, там какие-либо операторы, которые должны перейти к стандартному или глобальному пространству имен?

15
задан Jon Seigel 7 April 2010 в 00:48
поделиться

4 ответа

Согласно Koenig Lookup (стандарт C++ 3.4.2) operator<< будет искаться в пространствах имен аргументов. Нет необходимости объявлять его в пространстве имен std.

24
ответ дан 1 December 2019 в 00:11
поделиться

Стандарт C ++ явно запрещает вам объявлять собственные конструкции в пространстве имен std.

7
ответ дан 1 December 2019 в 00:11
поделиться

operator << (..., MyClass) должен находиться в том же пространстве имен, что и MyClass . Вы должны думать об этом как о части интерфейса MyClass , даже если это (обязательно) функция, не являющаяся членом.

Несколько ссылок:

21
ответ дан 1 December 2019 в 00:11
поделиться

Вообще, плохая практика - объявлять что-либо (типы, операторы и т.д. ...) частью пространства имен, которое вам не принадлежит. Это может иметь неожиданные последствия для людей, использующих вашу библиотеку. Лучшим решением является определение собственного пространства имен и импорт как std, так и вашего пространства имен, когда вам нужно объединить решения.

2
ответ дан 1 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: