Бьерн Страуструп - Язык программирования С++. Главы 5-8
Страница 54. Операторные функции и пользовательские типы



7.2.3 Операторные функции и пользовательские типы

 Операторная функция должна быть либо членом, либо иметь по крайней
 мере один параметр, являющийся объектом класса (для функций,
 переопределяющих операции new и delete, это не обязательно). Это
 правило гарантирует, что пользователь не сумеет изменить
 интерпретацию выражений, не содержащих объектов пользовательского
 типа. В частности, нельзя определить операторную функцию, работающую
 только с указателями. Этим гарантируется, что в С++ возможны
 расширения, но не мутации (не считая операций =, &, и , для объектов
 класса).
     Операторная функция, имеющая первым параметр основного типа,
 не может быть функцией-членом. Так, если мы прибавляем комплексную
 переменную aa к целому 2, то при подходящем описании функции-члена
 aa+2 можно интерпретировать как aa.operator+(2), но 2+aa так
 интерпретировать нельзя, поскольку не существует класса int, для
 которого + определяется как 2.operator+(aa). Даже если бы это было
 возможно, для интерпретации aa+2 и 2+aa пришлось иметь дело с двумя
 разными функциями-членами. Этот пример тривиально записывается
 с помощью функций, не являющихся членами.
    Каждое выражение проверяется для выявления неоднозначностей.
 Если пользовательские операции задают возможную интерпретацию
 выражения, оно проверяется в соответствии с правилами $$R.13.2.

 
« Предыдущая статья   Следующая статья »