考慮以下定義:這是保證演員安全嗎?
struct A {
// ...
};
struct B : public A {}; // empty
void f(B& b) { /* use b */}
void g(A& a) {
f(static_cast<B&>(a)); // is this a safe downcast?
}
int main() {
A a;
g(a);
}
在上面的例子a
真是A
一個實例。
既然B
有一個空的定義,我想知道是否在這個特定的情況下調用f及其執行是未定義的行爲。
它不是一個真正的「沮喪」,更像是一個「倒戈」! – typ1232
@ typ1232:從超類型(又名基類)轉換爲子類型(又名派生類)通常稱爲「向下轉換」,即使「基」聽起來像它應該在底部。 –