Mientras jugaba con this answer por user GMan Construí el siguiente fragmento (compilado con Visual C++ 9):¿Por qué no se invoca el "operador void" con la sintaxis de conversión?
class Class {
public:
operator void() {}
};
Class object;
static_cast<void>(object);
(void)object;
object.operator void();
después de pasar por encima con el depurador descubrí que la fundición hasta void
no invoca Class::operator void()
, sólo la tercera La invocación (con la invocación explícita del operador) en realidad invoca al operador, los dos moldes simplemente no hacen nada.
¿Por qué no se invoca el operator void
con la sintaxis de conversión?
Me encanta cómo siempre preguntas extrañas pero interesantes;) Aquí está mi +1. – ereOn
¿Qué código esperarías que fuera ejecutado * sin * el molde? En realidad, ninguno ... ¿por qué debería el casting cambiar esto? – Eiko
@Eiko: Si eso fuera 'operator int()' y yo escribimos '(int) object;' entonces se invocará 'operator int()'. Resulta que este no es el caso con 'operator void()', así que hice esta pregunta. – sharptooth