在C++ 14有幾種方法來聲明一個空的構造申報空/默認構造函數
class C1 {
int* ptr;
int val;
};
class C2 {
int* ptr = nullptr;
int val = 0;
};
class C3 {
constexpr C3() noexcept = default;
int* ptr;
int val;
};
class C4 {
constexpr C4() noexcept = default;
int* ptr = nullptr;
int val = 0;
};
class C5 {
constexpr C5() noexcept : ptr{nullptr}, val{0} = default;
int* ptr;
int val;
};
class C6 {
constexpr C6() noexcept : ptr{nullptr}, val{0} {}
int* ptr;
int val;
};
class C7 {
constexpr C7() noexcept;
int* ptr;
int val;
};
constexpr C7::C7() noexcept = default;
class C8 {
constexpr C8() noexcept;
int* ptr = nullptr;
int val = 0;
};
constexpr C8::C8() noexcept = default;
class C9 {
constexpr C9() noexcept;
int* ptr;
int val;
};
constexpr C9::C9() noexcept : ptr{nullptr}, val{0} = default;
class C10 {
constexpr C10() noexcept;
int* ptr;
int val;
};
constexpr C10::C10() noexcept : ptr{nullptr}, val{0} {}
我想知道,什麼是所有這些類與之間有什麼確切的差別類是嚴格等價的,並且會根據C++標準生成完全相同的行爲。
C3,C5,C7和C9是非法的。 – dyp
所有這些爲你編譯?如果是這樣,哪個編譯器和哪些選項? – juanchopanza