Потому что вы не можете изменять семантику примитивных типов. Было бы бессмысленно определять, как operator =
работает с int
, как учитывать указатель или как работает доступ к массиву.
Обоснование состоит в том, что для них не имело бы смысла быть нечленами, поскольку объект в левой части оператора должен быть экземпляром класса.
Например, , предполагая класс A
A a1;
..
a1 = 42;
Последний оператор на самом деле является таким вызовом:
a1.operator=(42);
Это не имело бы смысла для объекта на левой стороне . не быть экземпляром A, поэтому функция должна быть членом.