[英]Why are member classes initialized first in C++?
我已經嘗試過了。 碼:
#include <iostream>
struct A
{
A() { std::cout << "1"; }
A(const A&) { std::cout << "2"; }
A(A&&) { std::cout << "3"; }
};
struct B
{
B() { std::cout << "4"; }
B(const B& b) : a(b.a) { std::cout << "5"; }
B(B&& b) : a(b.a) { std::cout << "6"; }
A a;
};
int main()
{
B b1;
std::cout << "END OF b1" << std::endl;
B b2 = std::move(b1);
}
輸出為:
14END OF b1
26
我只是想知道為什么會這樣,為什么B的構造函數被稱為第二個? 我也嘗試過使用類而不是struct,這是相同的行為。
這是預期的行為。 初始化順序指定為
1)如果構造函數用於派生最多的類,則將虛擬基類按照它們在基類聲明的深度優先從左到右遍歷時出現的順序進行初始化(從左到右是指外觀在基本說明符列表中)
2)然后,直接基類按從左到右的順序初始化,因為它們出現在該類的基符列表中
3)然后,按類定義中的聲明順序初始化非靜態數據成員。
4)最后,執行構造函數的主體
然后,在執行B
的構造函數之前,始終將數據成員a
初始化(步驟#3)(步驟#4)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.