ROBIN KUMAR Ответов: 2

Почему некоторые операторы типа ::,.*,?: не могут быть перегружены в C++ ?


I understood the concept of overloading , but I am not clear why some operators can not be overloaded .I did not get any clear answer of it.


Что я уже пробовал:

Я понял концепцию перегрузки, но мне не ясно, почему некоторые операторы не могут быть перегружены .Ясного ответа я не получил.

Richard MacCutchan

Потому что таковы правила языка. Вы можете прочитать полное объяснение в любой опубликованной документации.

ROBIN KUMAR

спасибо..

2 Ответов

Рейтинг:
1

Stefan_Lang

Как общий ответ, для "некоторых" из этих операторов перегрузка не совсем немыслима, но Страуструп и комитет C++ не видели для них осмысленного использования, хотя потенциально вводили двусмысленности или неожиданные побочные эффекты.

(Лично я считаю позором, что единственный тернарный оператор '?:' не может быть перегружен - я уверен, что смогу найти ему применение ;-) )

Видеть Программирование на C++ / операторы/перегрузка операторов - Wikibooks, открытые книги для открытого мира[^] и Страуструп: стиль и техника C++ часто задаваемые вопросы: Почему я не могу перегрузить ...[^]


CPallini

5.

Рейтинг:
0

OriginalGriff

:: не может быть перегружен, потому что это квалификатор области применения оператор (или разрешение имен) - он задает имя класса и пространства имен и недоступен на уровне класса, поскольку помогает указать, на какой класс вы ссылаетесь.

Точно так же "." и "*" не могут быть перегружены, потому что они определяют доступ, а не операцию как таковую. Точка указывает член класса, а звезда-оператор разрешения указателя.

?: не может быть переопределен, потому что на самом деле это не оператор: это синтаксический сахар для if...then...оператор else, возвращающий значение.


Stefan_Lang

Ну, " * " может быть перегружено. Но вы, вероятно, имеете в виду унарный оператор, а не двоичный; - p

P.S.: На самом деле ' * '(унарный) также может быть перегружен, вы, вероятно, имели в виду'. * ' (как и я)
видишь https://en.wikibooks.org/wiki/C%2B%2B_Programming/Operators/Operator_Overloading#Operators_which_cannot_be_overloaded