我正在學習C++。 我想嘗試downcast一個接口類;儘管我已經學會了不好的編程設計可能會導致鑄造失敗。我可以使用static_cast來強制轉型嗎?
一些網站說:「使用dynamic_cast檢查向下鑄造的有效性」。但是,就我而言,我不需要檢查有效性,因爲我可以保證它是從基類向派生類的向下轉換。我在下面的示例代碼中嘗試了dynamic_cast和static_cast。他們運作良好。
當我可以保證它是一個有效的向下轉換時,我可以使用static_cast嗎?
示例代碼:
struct Parent_Interface {
virtual ~Parent_Interface() {};
virtual void print(void) = 0;
};
struct Child : public Parent_Interface {
virtual ~Child() {};
void print(void) override {
std::cout << "Child::print()." << std::endl;
}
};
void StaticDownCastToChild(Parent_Interface& parent_interface) {
auto& child0 = static_cast<Child&>(parent_interface);
std::cout << "StaticDownCastToChild : ";
child0.print();
}
void DynamicDownCastToChild(Parent_Interface& parent_interface) {
auto& child0 = dynamic_cast<Child&>(parent_interface);
std::cout << "DynamicDownCastToChild : ";
child0.print();
}
void test_static_cast_down_cast(void) {
Child c;
StaticDownCastToChild(c);
DynamicDownCastToChild(c);
}
執行test_static_cast_down_cast的輸出()。
StaticDownCastToChild : Child::print().
DynamicDownCastToChild : Child::print().
使用'static_cast'是推薦的方式。只是關於*任何*演員。 –
CRTP就是一個例子。 – chris