Przeciążenie operatora C ++ dla wskaźników

Zastanawiam się (po prostu z ciekawości), dlaczego przeciążanie operatorów nie jest dozwolone w C ++ dla wskaźników. Mam na myśli coś takiego:

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; 

Zauważ, że „a + b” tworzy nowy obiekt Vector, ale następnie kopiuje tylko swój adres do „c”, bez wywoływania konstruktora kopii. Więc rozwiązałby ten sam problem, który rozwiązują nowe referencje wartości. Ponadto, o ile wiem, jest to prawie równoważne temu, co dzieje się przy użyciu przeciążania operatora w C # (ale mogę się tutaj mylić, nigdy nie użyłem C #) i dlaczego wartości Rvalue nie są konieczne w C #.

To prawda, że ​​rozwiązanie referencyjne rvalue jest jeszcze lepsze, ponieważ pozwala na obiekty oparte na stosie, podczas gdy to przeciążenie zmusiłoby wszystkie obiekty Vector2d do życia na stercie, ale nadal wydaje się, że jest to coś, co byłoby łatwe do zaimplementowania w kompilatorach, być może lata przed pojawieniem się ref. A przy użyciu własnych podzielników nie byłoby nawetże powolny.

Czy jest to nielegalne tylko z powodu zasady „najmniej zaskoczenia”, czy też istnieją inne powody?

questionAnswers(2)

yourAnswerToTheQuestion