Ich lerne static_cast<Type>(object)
in C++. Ich fand es ruft Kopie Konstruktor von Type
mit object
. Ist das wahr? Wenn es wahr ist, warum es es kopiert? Ich dachte, es würde nur ändern, wie man den Speicher verwendet, auf den das Objekt zeigt. Wenn es benötigt wird, Kopie zu konstruieren, hat static_cast
mehr Kosten, als ich dachte. Muss ich mich um die Kosten kümmern?Warum static_cast <Type> (Objekt) kopiert Objekt in Type?
Die folgenden sind die Code-Test,
#include <iostream>
class Base {
public:
Base() {};
Base(const Base& org) {
std::cout << "Base Copy Constructor" << std::endl;
};
virtual ~Base() {};
};
class Derived : public Base {
public:
void static_casting(void) {
static_cast<Base>(*this);
}
};
void test_static_cast_copy_constructor(void) {
Derived a;
a.static_casting();
}
Ihnen sehr danken.
Falls es nicht offensichtlich war, [Sie ** schnitzen **] (https://Stackoverflow.com/questions/274626/what-is-object-slicing) das Objekt mit dieser Besetzung. – WhozCraig
Wenn Sie ändern möchten, wie der Speicher verwendet wird, verwenden Sie 'static_cast'. Alle Bemerkungen zum Slicen gelten weiterhin. –
"Ich dachte, es würde nur ändern, wie der Speicher verwendet wird, auf den das Objekt zeigt." Du hast falsch gedacht. In der Tat ist 'static_cast (Objekt)' in den meisten Fällen * so definiert, als würde man 'Type value (object)' für ein imaginäres Objekt 'value' machen. Das will es per Definition. Dafür ist 'static_cast' gedacht. –
AnT