2010-09-09 12 views
9

¿La tabla v (virtual method table) forma parte de la especificación C++, o corresponde al compilador resolver las búsquedas de métodos virtuales?C++ v-table: ¿Parte del lenguaje o compilador depende?

En caso de que forme parte de la especificación: ¿Por qué?

Supongo que depende del compilador, pero alguien me dijo que era parte de la especificación.

¡Las referencias son muy bienvenidas!

+0

Recién salido de interés ... ¿De qué otra forma lo implementarías? – Goz

+0

No sé ... :-) – aioobe

+0

Hay algunas alternativas enumeradas en el artículo de wikipedia en realidad. – aioobe

Respuesta

13

1,7 C++ El modelo de memoria [...] Varias características de la lengua, tales como referencias y funciones virtuales, podrían implicar la memoria ubicaciones adicionales que no son accesibles a los programas pero están gestionados por la implementación . [...]

Ahí lo tienes. Depende de la implementación.

+0

¿Tiene una URL para esa cotización? ([Este] (http://www.kuzbass.ru:8086/docs/isocpp/) no dice lo mismo). – aioobe

+0

No, pero puede descargar n3092.pdf. No estoy seguro de qué versión del borrador/a qué norma se refiere ese enlace. (¡Ni siquiera se abre para mí!) – dirkgently

+4

Vale la pena enfatizar que n3092.pdf es el borrador de la _siguiente_ versión de C++ (C++ 0x) y no un borrador del estándar actual. –

4

No, no es parte de la especificación del idioma. El estándar especifica cómo deben resolverse las llamadas a las funciones virtuales, pero no el mecanismo que el compilador implementa para lograr los resultados requeridos.

Es difícil proporcionar una referencia "negativa" (es decir, donde el estándar no requiere mandato una tabla v) pero las partes relevantes del estándar para llamadas a funciones virtuales son 5.2.2 [expr.call] y 10.3 [class.virtual].

Cuestiones relacionadas