Страуструп сказал, что C ++ должен быть расширяемым, но не изменяемым языком.
Оператор точки (доступа к атрибуту) считался слишком близким к ядру языка, чтобы допустить перегрузку.
См. Дизайн и развитие C ++ , стр. 242, раздел 11.5.2 Смарт-ссылки .
Когда я решил разрешить перегрузку оператора ->
, я, естественно, подумал, может ли оператор .
быть перегружен аналогичным образом.
В то время я считал следующие аргументы окончательными: если obj
является объектом класса, тогда obj.m
имеет значение для каждого члена m
класса этого объекта. Мы стараемся не делать язык изменчивым, переопределяя встроенные операции (хотя это правило нарушается для =
из-за крайней необходимости и для унарного &
).
Если бы мы допустили перегрузку .
для класса X
, мы не смогли бы получить доступ к членам X
обычными средствами; нам бы пришлось использовать указатель и ->
, но ->
и &
также могли бы быть переопределены. Я хотел расширяемый язык, а не изменчивый.
Эти аргументы веские, но не окончательные. В частности, в 1990 году Джим Адкок предложил разрешить перегрузку оператора .
точно , а оператор ->
- это.
"Я" в этой цитате - Бьярне Страуструп. Вы не можете быть более авторитетным, чем это.
Если вы хотите по-настоящему понять C ++ (например, «почему так»), вам обязательно следует прочитать эту книгу.