[英]Can I call a virtual function in a constructor?
我知道在構造函數中調用虛函數會導致未定義的行為。 但是,使用范圍修飾符調用虛函數是否正常?
class A
{
public:
A() { A::f(); }
virtual void f();
};
class B
{
public:
B() { B::f(); }
virtual void f();
};
我認為它與調用非虛函數沒有什么不同,它沒有任何問題。 這樣對嗎? 或者我忽略了什么?
你與你的電話就OK了A::f()
在A::A()
和B::f()
在B::B()
使用顯式限定調用函數時,不使用虛擬調用機制。
這是標准草案在調用虛函數時使用顯式限定的說法:
10.3 / 15范圍運算符(5.1)的顯式限定抑制了虛擬調用機制。 [例如:
class B { public: virtual void f(); };
class D : public B { public: void f(); };
void D::f() { / ... / B::f(); }
這里,
D::f
的函數調用確實調用B::f
而不是D::f
。 - 末端的例子]
你的例子很好,理解它的行為就像你調用非虛函數一樣。 我認為這是你的意圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.