Перегрузка оператора C ++ для указателей
Интересно (просто из любопытства), почему перегрузка операторов не разрешена в C ++ для указателей. Я имею в виду что-то вроде этого:
Vector2d* operator+(Vector2d* a, Vector2d* b) { return new Vector2d(a.x + b.x, a.y + b.y); }
Vector2d* a = new Vector2d(1, 1);
Vector2d* b = new Vector2d(2, 2);
Vector2d* c = a + b;
Обратите внимание, как «a + b» создает новый объект Vector, но затем копирует только его адрес в «c», не вызывая конструктор копирования. Таким образом, это решило бы ту же проблему, что и новые ссылки на rvalue. Кроме того, насколько я знаю, это в значительной степени эквивалентно тому, что происходит при использовании перегрузки операторов в C # (но я могу ошибаться, я никогда не использовал C #), и почему ссылки на rvalue не нужны в C #.
Правда, эталонное решение rvalue еще лучше, так как оно позволяет основанным на стеке объектам, хотя эта перегрузка заставила бы все объекты Vector2d жить в куче, но все же это, по-видимому, было бы легко реализовать в компиляторах, возможно, за много лет до того, как рефери пришли. А с пользовательскими распределителями это даже не будетэто медленный.
Так что это только незаконно из-за принципа «наименьшего удивления» или есть и другие причины?