C ++ v-таблица: зависит от языка или компилятора? - PullRequest
9 голосов
/ 09 сентября 2010

Является ли v-таблица ( таблица виртуальных методов ) частью спецификации C ++, или компилятор должен решить поиск виртуальных методов?

Если это часть спецификации: почему?

Я предполагаю, что это зависит от компилятора, но кто-то сказал мне, что это часть спецификации.

Ссылки приветствуются!

Ответы [ 2 ]

13 голосов
/ 09 сентября 2010

1.7 Модель памяти C ++ 3 [...] Различные функции языка, такие как ссылки и виртуальные функции, могут включать дополнительные области памяти, которые не являютсядоступны для программ, но управляются реализацией.[...]

Вот, пожалуйста.Это до реализации.

4 голосов
/ 09 сентября 2010

Нет, это не является частью спецификации языка. Стандарт определяет, как должны разрешаться вызовы виртуальных функций, но не механизм, который реализует компилятор для достижения требуемых результатов.

Трудно предоставить «отрицательную» ссылку (т. Е. Там, где стандарт не не обязывает v-таблицу), но соответствующие части стандарта для вызовов виртуальных функций - 5.2.2 [expr .call] и 10.3 [class.virtual].

...