Предполагая, что вы имеете в виду «не зависит от каких-либо непубличных участников», Скотт Мейерс однажды ответил на определенный нет на этот вопрос.
Однако он сосредоточился только на инкапсуляции: инкапсуляция улучшается за счет того, что эти функции не являются членами.
Другие соображения могут, например, включать то, что вы не можете вызвать operator<<
для временного, если оператор определен как не член. (Зачем вам это нужно? Ну, например, для создания строкового аргумента из составных частей в стиле iostream.)
И соображения могут включать просто, насколько естественным и понятным является использование обозначений. Запись с вложенными вызовами (как для не членов) может быть довольно раздражающей и неясной. Вот почему у нас есть ->
как синтаксический сахар для *
разыменования + выбор элемента.
Итак, если вы сосредоточены только на инкапсуляции, то выведите эти функции-члены из класса, как советовал Скотт Мейерс. И в противном случае примите инженерное решение, в котором также учитываются такие аспекты, как удобство использования и четкость обозначений. Во всяком случае, не беспокойтесь об этом: это, вероятно, не невероятно важно. : -)
Приветствия & hth.,