首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++默认构造函数

C++默认构造函数
EN

Stack Overflow用户
提问于 2011-01-29 19:27:59
回答 4查看 6K关注 0票数 10

如果我们说default constructor是没有参数的构造函数,那么我们也可以说编译器创建的构造函数也是default constructor

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2011-01-29 19:32:13

默认构造函数是可以在没有参数的情况下调用的构造函数。

C++98 §12.1/5

X的默认构造函数是可以在没有参数的情况下调用的X的构造函数。如果类X没有用户声明的构造函数,则隐式声明默认构造函数。

票数 18
EN

Stack Overflow用户

发布于 2011-01-29 19:30:39

默认构造函数是可以在没有参数的情况下调用的构造函数。所以这要么是一个没有参数的构造函数,要么是一个参数都有默认值的构造函数。

但是,如果你没有提供任何其他的构造函数,编译器会生成一个默认的构造函数。

推荐阅读:http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.4

票数 8
EN

Stack Overflow用户

发布于 2011-01-29 20:24:21

代码语言:javascript
复制
                         +------> Implicitly GENERATED by compiler
                         |
                         |
Default Constructor -----+
                         |
                         |
                         +------> Explicitly provided by programmer

基本上,默认的ctor是不带参数的ctor。

请注意,在以下情况下,编译器不会生成任何默认的ctor:

代码语言:javascript
复制
    class WontGenerateDefCtoByCompiler
    {
private:
    char* iHaHaPtr;
    };

原因是编译器认为没有任何需要初始化程序员提供的指针。程序员有责任正确地编写和初始化默认的ctor。

另一方面,如果你在上面的类中写一个虚函数,编译器肯定会生成一个默认的ctor (但不会为你初始化iHahaptr指针)。此外,只有在程序中创建了该对象的实例时,才会生成这样的ctor (否则,编译器也不会生成ctor )。

以下是编译器将隐式生成默认ctor (如果不是由程序员提供)的唯一4个条件:

代码语言:javascript
复制
(1) The class has a virtual function (Why? need to setup vptr correctly )
(2) The class is derived from another class that has default ctor (either implicitly generated or explictly provided)
(3) The class has a member that has default ctor (either implicitly generated or explictly provided)
(4) The class is virtually derived from other class 

在所有其他情况下,编译器不会生成任何默认的ctor。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4836596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档