Это зависит от масштаба вещей. По большей части это - просто пара проверок и некоторых, указатель разыменовывает. В большинстве реализаций, наверху каждого объекта, который имеет виртуальные функции, существует указатель на vtable, которое содержит список указателей на все реализации виртуальной функции на том классе. Я предположил бы, что большинство реализаций будет использовать это для любого хранилища другой указатель на type_info структуру для класса.
, Например, в псевдоC++:
struct Base
{
virtual ~Base() {}
};
struct Derived
{
virtual ~Derived() {}
};
int main()
{
Base *d = new Derived();
const char *name = typeid(*d).name(); // C++ way
// faked up way (this won't actually work, but gives an idea of what might be happening in some implementations).
const vtable *vt = reinterpret_cast<vtable *>(d);
type_info *ti = vt->typeinfo;
const char *name = ProcessRawName(ti->name);
}
В целом реальным аргументом против RTTI является непригодность для обслуживания необходимости изменить код везде каждый раз, когда Вы добавляете новый производный класс. Вместо операторов переключения везде, учтите операторы переключения в виртуальные функции. Это перемещает весь код, который отличается между классами в сами классы, так, чтобы новая деривация просто переопределила все виртуальные функции для становления полностью функционирующим классом. Если необходимо было когда-либо искать через большую кодовую базу в течение каждого раза, когда кто-то проверяет тип класса и делает что-то другое, Вы будете быстро учиться избегать того стиля программирования.
, Если Ваш компилятор позволяет Вам полностью выключить RTTI, заключительные получающиеся сбережения размера кода могут быть значительными, хотя, с такой маленькой RAM располагают с интервалами. Компилятор должен генерировать type_info структуру для каждого класса с виртуальной функцией. Если Вы выключаете RTTI, все эти структуры не должны быть включены в исполняемое изображение.
Вы можете легко сделать это, нажав кнопку подтверждения:
<p id="accept-favor"><a title="Accept this Favor"
href="?wp_accept_favor=<?php comment_ID(); ?>"
onclick="return confirm('Are you sure you would like to accept this reply as your favor?');"
>Accept this Favor</a></p>
Хотя вместо «Да / Нет» будет отображаться «ОК / Отмена». Если вы действительно хотите Да / Нет, вам придется использовать собственный диалог.
Вы можете использовать эту функцию:
myFunction() {
var x;
if (confirm("Are you sure?") == true) {
x = "You pressed OK!";
} else {
x = "You pressed Cancel!";
}
return x;
}
myFunction();