回答
class A
{
public:
// Or use A()=default for C++11
A(){}
A(int v):m_value(v){}
private:
int m_value;
};
int main()
{
A a; // Without default ctor ==>> error C2512: 'A' : no appropriate default constructor available
return 0;
}
隐含的默认构造函数消失。你仍然可以编写另一个默认的构造函数,一个不带任何参数或只带有缺省值的参数;这只是编译器没有为你做的。
没有理由不能为类A
写一个空的构造函数,并采用每个值的默认值。也许不是最好的主意,但它可以做到。
A() {/* empty */}
正如评论指出的,如果你正在使用C++ 11你也可以使用新的default keyword给你什么,如果它做的“默认”
A() = default;
编译器将有前C++ 11
class MyClass
{
public:
MyClass(int x, int y) {}
MyClass() {}
};
或C++ 11
class MyClass
{
public:
MyClass(int x, int y) {}
MyClass() = default;
};
你可以根据自己的喜好编写尽可能多的构造函数,但是避免让你的类感到困惑。
+1后记建议。 –
struct S {
S(int) {} // non-default constructor that suppresses the implicit default constructor
S() = default; // bring the default constructor back
};
请注意,有两种使用“默认”的意义。从某种意义上说,它有一个默认的构造函数,它具有一个签名,以便在“默认构造”中使用它。
其次,在默认情况下,实现将与编译器为隐式声明的构造函数自动生成的内容匹配。
通过给出构造函数的默认参数,可以使您的类缺省构造(第一种意义上的缺省构造)。
struct S {
S(int = 10) {}
};
虽然= default
用来明确要求默认实现(默认的第二个含义)。
假设你的编译器实现了= default
,使用它通常优于S() {}
,原因很多。类定义中的= default
会生成一个非用户提供的构造函数,它具有多个效果。
- 用户提供的特殊成员函数从未琐碎
- 用户提供的构造不够格从一种聚合一种类型。
- 值初始化包括零初始化类型与非用户提供的默认构造函数
- 默认const对象的初始化是不允许的类型,而用户提供的默认构造函数
偶尔有人可能会想由于这些效果之一而由用户提供的功能。它仍然可以通过使用它的类定义之外使用= default
:
struct S {
S();
};
S::S() = default;
以上提供的编译器的默认实现,但仍算作用户提供的默认构造函数。另外,这可以用来保持ABI的稳定性;在后面的点= default
可以被替换为另一个定义,而不需要重新编译构造对象的所有代码,而使用内联默认构造函数时将需要该对象。
- 1. 正在编写一个默认的构造函数吗?
- 2. C++,默认构造函数
- 3. C++一个类的默认构造函数调用另一个类的另一个默认构造函数
- 4. C++如何写一个构造函数?
- 5. 重写默认的构造函数
- 6. 从另一个构造函数调用默认构造函数
- 7. 在C++中创建一个默认构造函数
- 8. 如何用C++编写构造函数?
- 9. C++编译器如何合成默认拷贝构造函数
- 10. 了解默认的构造函数C++
- 11. C++默认的拷贝构造函数
- 12. 如何编写一个Objective-C的便利构造函数
- 13. C++构造函数调用默认构造函数
- 14. C++中隐式默认构造函数的默认值
- 15. 如果我在默认构造函数中放置一个参数,但给参数一个默认值,它是否仍然是一个默认构造函数?
- 16. 如何让编译器在C++中创建默认的构造函数?
- 17. 默认构造函数C++头和cpp
- 18. 默认构造函数C++格式
- 19. 默认构造函数C++错误
- 20. C++默认拷贝构造函数
- 21. 未找到C++默认构造函数
- 22. 非默认构造函数
- 23. 默认构造函数
- 24. constexpr默认构造函数
- 25. 非默认构造函数
- 26. 定义一个内联的默认构造函数C++
- 27. 统一使用默认构造函数和参数化构造函数c#
- 28. 如何与出默认的构造函数另一个类
- 29. 构造一个通用对象(不是默认构造函数)
- 30. C++默认构造函数和默认参数
'= dafault' .... –
@LuchianGrigore *'default' – zch
什么'dafault'我刚读?!? – Casey