Почему некоторые операторы могут быть перегружены только как функции-члены, другие как функции-друзья, а остальные - как обе?

45
задан Yakk - Adam Nevraumont 20 December 2013 в 16:40
поделиться

2 ответа

Потому что вы не можете изменять семантику примитивных типов. Было бы бессмысленно определять, как operator = работает с int , как учитывать указатель или как работает доступ к массиву.

6
ответ дан 26 November 2019 в 21:29
поделиться

Обоснование состоит в том, что для них не имело бы смысла быть нечленами, поскольку объект в левой части оператора должен быть экземпляром класса.

Например, , предполагая класс A

A a1;
..
a1 = 42;

Последний оператор на самом деле является таким вызовом:

a1.operator=(42);

Это не имело бы смысла для объекта на левой стороне . не быть экземпляром A, поэтому функция должна быть членом.

8
ответ дан 26 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

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