К какому пространству имен относится оператор << (stream)? - PullRequest
15 голосов
/ 19 марта 2010

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

В качестве возможного дополнительного вопроса, есть ли операторы, которые должны перейти в стандартное или глобальное пространство имен?

Ответы [ 4 ]

24 голосов
/ 19 марта 2010

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

21 голосов
/ 19 марта 2010

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

Пара ссылок:

7 голосов
/ 19 марта 2010

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

2 голосов
/ 19 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...