170 похожих чатов

Всем привет. Кто может объяснить следующее - в стандарте

говорится, что переопределение виртуальной функции не наследует аргументы по умолчанию, а вот вызов - наоборот, наследует аргументы по умолчанию в объявлении виртуальной функции.

[dcl.fct.default] пункт 10:
A virtual function call (11.7.2) uses the default arguments in the declaration of the virtual function determined by the static type of the pointer or reference denoting the object. An overriding function in a derived class does not acquire default arguments from the function it overrides.
struct Base {
virtual void f( int a = 7 ) {
std::cout << "Base::f() with a = " << a << '\n';
}
};
struct Derived : Base {
void f( int a ) {
std::cout << "Derived::f() with a = " << a << '\n';
}
};

Derived* pd = new Derived;
Base* pb = pd;

pb->f(); // здесь получим Derived::f() with a = 7

Во время инициализации vtable просто происходит заполнение всех офсетов, указателей на typeinfo и адресов соответствующих методов. И вот тут я не понимаю следующее - компилятор сам куда-то заносит эту информацию связанную с аргументом по умолчанию? или хранит в аргументах переопределенных методов, если так - тогда почему вызов pd->f(); без аргументов приводит к ошибке связанной с неправильной числом переданных аргументов?

3 ответов

14 просмотров

Никаких втейбл в стандарте нет

Kirill- Автор вопроса
Denis P
Никаких втейбл в стандарте нет

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

Kirill
это и так ясно, есть примерное представление как в...

Компилятор просто подставит дефолтное значение если ты его не указал, это ортогонально виртуальным функциям

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Господа всем привет. Для того чтобы страница индексировалась с запросом под каждый город. Это нужно делать отдельные страницы для каждого города, или есть варианты по лучше?
Владимир
8
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
а я честно сказать не понимаю - нахуя идти учиться на вышку или еще куда-либо и при этом нихуя не делать, типа зачем ? просто корку получить, а нахуй она нужна тогда ?
Eugene Неелов
7
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Книга Юрова В.И пойдёт для обучения?
Botsman
24
Карта сайта