當讀取項目27最小化在C++有效鑄造,它說,不要試圖用static_cast
在派生類中投*this
基類。這是因爲static_cast<Base>(*this)
將創建一個基類的臨時對象。我嘗試了一個例子,但是,它總是使用不同的編譯器輸出10,例如clang 3.8和gcc 4.9,5.3。的static_cast派生此對象的基類在C++中
我錯了嗎?
#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
會創建一個臨時對象。
爲什麼不打印10? – emlai
問題是什麼?你想解決什麼問題? –
有效的C++說static_cast(* this)將創建一個Base類的臨時對象。所以在這樣的假設下,我認爲它應該輸出0.這是正確的嗎? – kwunlyou