c++ - poo - Creación de instancias de una clase abstracta a través de la lista de inicializadores
ejercicios de clases abstractas e interfaces en java (1)
Esto parece un error conocido de g ++ número 70939 :
Creación de objeto de clase abstracta permitido en todas las versiones de g ++
g ++ compila el programa C ++ mal formado con éxito
class A { public: A() { printf("A()/n"); } virtual void b() const = 0; }; int main() { const A& a{}; a.b(); return 0; }
Tu código hace lo mismo que esta línea.
const A& a{}
como parte de la invocación g({})
.
Esta pregunta ya tiene una respuesta aquí:
Me gustaría entender por qué el compilador permite compilar el siguiente código
#include <iostream>
struct A
{
A()
{
std::cout << "A::A/n";
}
virtual void f() const = 0;
};
void g(const A& a)
{
a.f();
}
int main()
{
g({});
}
Incluso emite A::A
cuando se ejecuta.
Si sustituyo g({})
por g(A())
obviamente no se compila. Se queja de que A
es abstracto y no puede ser instanciado. Tanto Clang como GCC compilan esta multa sin ninguna advertencia. Cuando se ejecutan ambas versiones, se imprime pure virtual method called
y termina.