vallenato trap tag songs sobrecarga preguntas poo operator operadores las ejercicios ejemplos challenge canciones c++ operator-overloading

c++ - songs - tag del trap



¿Qué reglas especiales se aplican a unario y operador? (1)

¿Hay alguna regla especial que se aplique a unario y operador?

Por ejemplo, el código:

#include <iostream> struct X { X() {} void* operator &() { return NULL; } }; int main() { const X x; std::cout << &x << std::endl; X y; std::cout << &y; }

produce la salida

0xbfbccb33 0

Sabía que esto se compilaría y ejecutaría de esta manera debido a una discusión que he tenido aquí antes, pero si no lo hubiera sabido, hubiera esperado que esto no compilara, porque el operator & no se ha declarado const .

Así que parece que el compilador genera el operator &() const independientemente de si el operator &() está sobrecargado o no. Bien, esto tiene sentido, especialmente con la muestra y la salida.

La pregunta es ¿ dónde se detalla este comportamiento en la norma?

No estoy buscando respuestas que repitan lo que ya dije en la pregunta, así que no explique cómo no se puede llamar a mi operador sobrecargado en un objeto const , porque ya lo sé.


n3337 13.3.1.2/9

Si el operador es el operador, el operador unario & , o el operador ->, y no hay funciones viables, se asume que el operador es el operador integrado y se interpreta de acuerdo con la Cláusula 5.