При чтении статьи 27 "Минимизируйте приведение в Effective C++" говорится, что не пытайтесь использовать static_cast
для приведения *this
в производном классе к базовому классу. Это потому, что static_cast<Base>(*this)
создаст временный объект базового класса. Я попробовал следующий пример, однако он всегда выводит 10 с использованием разных компиляторов, таких как clang 3.8 и gcc 4.9, 5.3.
Я ошибся?
#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;
}
Вопрос в том, почему static_cast
создаст временный объект.
A(*this)
. Подумайте, какой конструктор он использует. - person Kerrek SB   schedule 29.04.2016