• 什么是默认构造函数?


    转载:https://blog.csdn.net/bear_n/article/details/72798301

    对于C++默认构造函数,我曾经有两点误解:

    • 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数;
    • 合成默认构造函数会初始化类中所有的数据成员;

    在看《Effective C++》时,条款05《了解C++默认编写并调用哪些函数》中说到“….惟有当这些函数被需要(被调用),它们才会被编译器创建出来。

    “这些函数“指的是编译器版本的拷贝构造函数赋值操作符析构函数,如果类中没有生命任何构造函数,编译器还会为类声明一个default默认构造函数

    这些函数都是public且inline的;

    也就是说,默认构造函数“被需要”的时候编译器才会帮我们合成,那什么情况才是默认构造函数”被需要“呢?

    这个问题《Effective C++》并没有给出答案,直到看了《深度探索C++对象模型》,才明白了编译器何时才会帮我们合成一个默认构造函数。

    什么是默认构造函数?

    默认构造函数是可以不用实参进行调用的构造函数,它包括了以下两种情况:

    1. 没有带明显形参的构造函数。
    2. 提供了默认实参的构造函数。

    类设计者可以自己写一个默认构造函数。编译器帮我们写的默认构造函数,称为“合成的默认构造函数”。

    强调“没有带明显形参”的原因是,编译器总是会为我们的构造函数形参表插入一个隐含的this指针,所以”本质上”是没有不带形参的构造函数的,只有不带明显形参的构造函数,它就是默认构造函数。

    青青园中葵,朝露待日晞。 阳春布德泽,万物生光辉。 常恐秋节至,焜黄华叶衰。 百川东到海,何时复西归? 少壮不努力,老大徒伤悲!
  • 相关阅读:
    常见linux内核线程说明
    /proc/modules分析
    linux用户空间和内核空间(内核高端内存)_转
    二层交换机/三层交换机/路由器
    NAT--Network Address Translator
    curl命令使用
    (转)XML中必须进行转义的字符
    LFCP
    IPSP问题
    API和schema开发过程问题汇总
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/14687801.html
Copyright © 2020-2023  润新知