0

Как лучше перегружать оператор +: через friend функцию внутри класса или как inline функцию вне класса?

Класс шаблонный.

wchistow
  • 3,697
  • 6
  • 13
  • 32
tbbt
  • 25
  • Что такое "перегружать"? Объявлять? Определять? – AnT stands with Russia Dec 17 '19 at 15:26
  • @AnT переопределить, я так сначала и написать, но в похожих вопросах справа везде "перегрузка", наверное, это русский вариант для overload – tbbt Dec 17 '19 at 16:00

1 Answers1

2

Не совсем понятно такое ограничение количества вариантов. Friend-функцию можно определять и внутри, и снаружи класса. Определение снаружи класса может быть как inline, таки и не inline. Почему вдруг речь идет только о "friend функции внутри класса"? Почему при определении вне класса речь идет именно об inline?

Тем не менее:

Во-первых, без разницы. Во-вторых, зависит от того, нужен ли вам friend-доступ. Нужен или нет?

Обычно предпочитают friend-вариант даже тогда, когда friend-доступ не нужен, просто потому, что он позволяет поместить все определение перегружаемой функции внутрь класса. Кто-то считает, что в таком виде код выглядит удобочитаемее. Это так, для небольших функций.

Большие функции, по моему мнению, лучше определять вне класса. И здесь вопрос о том, будет ли функция inline и будет ли функция friend определяется посторонними факторами, специфичными для каждой функции, которые вы в своем вопросе не упомянули.

К "шаблонности" класса все это не имеет никакого отношения. С тем только замечанием, что в таком случае есть одна тонкость: объявить нешаблонную перегрузку в таком случае можно только как friend прямо в определении шаблона класса. (см. здесь)

  • Такие варианты, потому что на cppreference friend внутри, а на stackoverflow inline снаружи – tbbt Dec 17 '19 at 15:57
  • вот 1 вариант https://en.cppreference.com/w/cpp/language/operators вот 2 вариант https://stackoverflow.com/a/4421719 – tbbt Dec 17 '19 at 15:59