Итак, C++ позволяет перегружать унарный operator &
(адрес). Знаете ли вы о каком-либо real-world пример, когда operator &
был по праву перегружен? И второй, более конкретный вопрос, знаете ли вы о каком-нибудь real-world пример, когда operator &
был по праву перегружен при сохранении семантики адреса? TIAИмеет ли смысл перегружать унарный оператор &?
ответ
У меня 207 реального мира примеры operator &()
: Code search 1, Code search 2.
Включая SafeInt<>
(чтобы получить основное голое целое), boost::gil (по-видимому, также для получения исходных данных), Mozilla (которые говорят «это рискованно для определения оператора &, но, эй, мы знаем, что мы делаем . "), wxWidgets, Armagetron и многое другое.
Кажется, некоторые используют итератор идиому &*it
, чтобы получить необработанную ссылку или указатель в обратном направлении, и написать *&it
, чтобы получить сырую ссылку и &it
, чтобы получить сырой указатель.
Обратите внимание, что после того, как ваш тип перегружает operator&
и возвращает что-то другое, чем встроенный оператор, ваш тип больше не копируется (в C++ 03 - C++ 0x, похоже, его поднял), и поэтому не может быть используется как элементный тип в контейнере Standard.
Я не знаю конкретного примера, но я мог представить себе контейнерный класс, где вы можете захотеть вернуть умный указатель или итератор. Я не говорю, что это обязательно имеет смысл.
мой вопрос был -специально - о реальных примерах –
Ты прав Оли. Умный указатель - это классы, которые должны вести себя как указатели и, следовательно, нужны операторы * или даже и перегружены. Взрыв. –
@Samrat: Что, на самом деле, перегружает и для умного указателя дает вам ?! –
Это, как представляется, используется в АТЛ, например http://msdn.microsoft.com/en-us/library/5s6et3yb.aspx
Спасибо, это именно то, что я искал –
одна хорошая причина, чтобы перегрузить это может быть, чтобы сделать его private
, чтобы запретить пользователям использовать его. Я не могу думать о каком-либо реальном примере, где вы хотели бы предотвратить это, но это, по-видимому, самая логичная причина для его перегрузки.
Я перегрузил этот оператор при написании классов для взаимодействия с Direct3D. Это был класс интеллектуальных указателей, который должен был возвращать T ** из оператора &, чтобы его можно было использовать в функциях, которые ожидают от указателя к указателю. Т ** семантика редка, но в некоторых ситуациях вам это нужно.
Я сделал это один раз, когда объект имел специальную интеллектуальную указатель. operator&
спокойно «поднял» выделенный стек объект в версию интеллектуального указателя на основе кучи, и этот оператор вел себя по-разному, как только объект находился внутри указателя.
У меня больше нет кода, но там был причина для этого в то время. Это, конечно, не решение принять легкомысленно, эта дорога выложена трупами.
+1 для страшных предупреждений – KitsuneYMG
- 1. как перегружать унарный/оператор?
- 2. Почему унарный оператор имеет ассоциативность
- 3. Должен ли я перегружать == Оператор?
- 4. Зачем перегружать унарный оператор, который является нестатической функцией-членом, которая не имеет параметров в C++?
- 5. Какой оператор мне нужно перегружать?
- 6. Имеет ли смысл int * & имеет смысл?
- 7. Оператор = проблемы перегружать
- 8. [: -eq: ожидается унарный оператор
- 9. Как работает Унарный оператор «&»
- 10. [: ==: ожидается унарный оператор-баш
- 11. '|' не постфикса унарный оператор
- 12. + унарный оператор в JavaScript
- 13. перегружать «==» оператор в скор
- 14. Что делает унарный оператор ~ в numpy?
- 15. C++ оператор <перегружать структура
- 16. Условный оператор унарный в C
- 17. перегрузки унарный оператор для постфикса
- 18. Оператор [] показывает мне ошибку 'унарный *'
- 19. Унарный оператор в std :: transform
- 20. Dart переопределяет унарный оператор-минус
- 21. icCube унарный оператор для единственной меры
- 22. Имеет ли смысл [C++ 11: 12.8/7]?
- 23. Имеет ли смысл изучать COBOL?
- 24. Имеет ли смысл этот дизайн?
- 25. Имеет ли смысл метатеги html?
- 26. Пролог Имеет ли смысл рекурсия?
- 27. Имеет ли смысл тестировать контроллеры
- 28. Действительно ли обезьяна имеет смысл?
- 29. Имеет ли это наследование смысл?
- 30. Имеет ли смысл класс Java?
@Johannes: Спасибо! Я никогда не знал о поиске кода Google. Жаль, что я не могу принять комментарий как ответ :) –