Beim Lesen von Artikel 27 Gießen in Effektive C++ minimieren, versuchen Sie nicht zu static_cast
*this
in abgeleiteten Klasse zu Basisklasse zu verwenden. Es, weil static_cast<Base>(*this)
ein temporäres Objekt der Basisklasse erstellen wird. Ich habe ein Beispiel wie folgt versucht, jedoch immer 10 mit verschiedenen Compilern wie clang 3.8 und gcc 4.9, 5.3.static_cast leitete dieses Objekt zur Basisklasse in C++
Bin ich falsch?
#include <iostream>
class A {
public:
int a;
virtual void foo() {std::cout << a << std::endl;}
};
class B : public A {
public:
int b;
void foo() { static_cast<A>(*this).foo();}
};
int main() {
B b;
b.a = 10;
b.foo();
return 0;
}
Die Frage ist, warum static_cast
wird ein temporäres Objekt erstellen.
Warum sollte es nicht 10 drucken? – emlai
Was ist die Frage? Was ist das Problem, das du lösen willst? –
Effektive C++ besagt, dass static_cast (* this) ein temporäres Objekt der Basisklasse erstellt. Unter dieser Annahme denke ich, dass es 0 ausgeben sollte. Ist das korrekt? – kwunlyou