在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