是什麼一類成員明智的初始化和直接初始化之間的區別? 在這個類中定義的兩個構造函數有什麼區別?
class A
{
public:
int x;
int y;
A(int a, int b) : x(a), y(b)
{}
A(int a, int b)
{
x = a;
y = b;
}
};
是什麼一類成員明智的初始化和直接初始化之間的區別? 在這個類中定義的兩個構造函數有什麼區別?
class A
{
public:
int x;
int y;
A(int a, int b) : x(a), y(b)
{}
A(int a, int b)
{
x = a;
y = b;
}
};
的理論答案已被其他會員送出。
務實,成員明智的初始化是在這些情況下使用:
MyClass & mMyClass
)。您需要執行成員方式的初始化,否則,它不會編譯。const MyClass mMyClass
)。您還需要執行成員方式的初始化,否則,它不會編譯。MyClass mMyClass
沒有構造函數)。您還需要執行成員方式的初始化,否則,它不會編譯。MyClass mMyClass
和sizeof(MyClass) = 1000000000
)。通過成員方式初始化,您只需構建一次。通過構造函數中的直接初始化,它被構建兩次。第一個使用初始化和第二個沒有使用初始化,它採用分配。在第二個中,成員x
和y
首先被默認初始化(其中零),然後它們分別被分配了a
和b
。
還要注意的是,在第二個,成員是缺省初始化僅當的類型的成員都具有非平凡默認構造函數。否則,不會進行初始化(正如@James在評論中指出的那樣)。
現在看到這個題目就知道:
這就是我一直在尋找的答案。 – cppcoder
我的榮幸!儘管如果你接受它,我會更加高興! =)(你可以在關閉的時候這麼做嗎?) – Fezvez