【C++】什么情况下编辑器自动生成默认的构造函数?(详解)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

  首先我们需要明确,在没有显示定义构造函数的时候,编辑器不一定会自动生成默认的构造函数

  对c++初学者来说存在一个误区,如果类没有定义任何构造函数,编译器会自动生成默认的构造函数。

正确的说法:

只有默认构造函数”被需要“的时候编译器才会生成默认构造函数。

那么什么时候是编辑器自己想生成的呢?这里我们给出了四个场景 :

场景一:含有类对象数据成员,该类对象类型有默认构造函数

class A
{
   
   
public:
	A()
	{
   
   
		cout << "A()" << endl;
	}
}
C++基础知识—关于默认构造函数的一切 C++条款—关于默认构造函数的一切   默认构造函数(defaultconstructor): 默认构造函数是在未提供显示初始值时,用来创建对象的构造函数。如果没有提供任何构造函数,则C++将自动提供默认构造函数默认构造函数没有参数,因为声明中不包含值。同时,当且仅当没有定义构造函数时,编译器才会提供默认构造函数。为类定义了构造函数后,程序员就必须为它提供默认构造函数,如果提供了非默认构造 阅读详情

相关推荐

C/C++—— 默认构造函数是否会执行

在我了解默认构造函数之前,我一直以为两点:1.如果类中我不声明构造函数,编译器会自动生成默认构造函数并执行。 2.编译器自动生成默认构造函数会将类成员初始化。然而这两点都是错的。

Be The Best! 2184

编译器只有在三种情况下,才会提供默认构造函数

如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认构造函数: 1、如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时 类有虚拟成员函数意味着这个类可能被继承,那么那个子类将要调用父类的构造函数,当用户没有主动定义构造函数时编译器应该提供默认构造函数。类有虚拟继承父类,即声明其虚基类可以被共享,理由? 2、如果类的基类有构造函数(可以是用户定义的构造函数,或编译器...

HayPinF的博客 2507

c++ 虚函数_C++ 合成默认构造函数的真相

作者:melonstreet链接:https://www.cnblogs.com/QG-whz/p/4676481.html对于C++默认构造函数,我曾经有两点误解:类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数。合成默认构造函数会初始化类中所有的数据成员。第一个误解来自于我学习C++的第一本书 《C++ Primer》,在书中392页:“只有当一...

weixin_39727743的博客 351

c++编译器什么时候生成默认构造函数

C++标准中这么说: 对于类X,如果没有任何用户定义的构造函数,那么就会有一个默认构造函数被暗自声明出来;这种函数一般没有什么用。。。 不过实际上不是什么时候编译器都生成默认构造函数,但下面集中情况却一定会为我们生成默认构造函数: 1.类A中包含一个成员是另外一个类B,如果类B定义了默认构造函数。这个时候如果类A没有定义默认构造函数,编译器会暗自生成一个默认构造函数来调用调用类B的构造函

shaolianbo的专栏 752

C++默认构造函数——深入理解

错误认识1:若程序员没有自己定义无参数的构造函数,那么编译器会自动生成默认构造函数,来进行对成员函数的初始化。 错误认识2:编译器合成出来的default constructor会明确设定'“class内每一个data member的默认值”。但这两种种认识是有误的,不全面的。 正确认识: 默认构造函数分为有用的和无用的,所谓无用的默认构造函数就是一个空函数、什么操作也不做,而有用的默

HAN Kai 6万+

⚡【C++要笑着学】(7) 默认成员函数:构造函数 | 析构函数 | 拷贝构造函数

朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!

有道无术, 术尚可求。有术无道, 止于术。 4万+

C++ 默认构造函数

C++ 默认构造函数 一直认为若程序员没有自己定义无参数的构造函数,那么编译器会自动生成默认构造函数,来进行对成员函数的初始化,但这种认为是有误的,不全面的. 默认构造函数分为有用的和无用的,所谓无用的默认构造函数就是一个空函数、什么操作也不做,而有用的默认构造函数是可以初始化成员的函数。 对构造函数的需求也是分为两类:一类是编辑器需求,一类是程序的需求。 程序的需求

HAN Kai 1635

7. C++编辑器合成默认构造函数的问题

这时编译器会在成员类的 default constructor被调用的时候合成的构造函数,比如声明子类对象时,如果 成员类的 default constructor没有被 调用时是不会合成的构造函数,相信学过面向对象的都知道吧,声明类只是声明了一种自定义类型,其实并没有被开辟内存,只有使用时才被开辟内存空间的。虚继承也会在子类对象中被合成一个指向虚基类的指针,因此也要被初始化,所以必须要构造函数,虚基类或者虚继承保证子类对象中只有一份虚基类的对象,特别是对于多重继承更是很重要。

谢谢大家的关注 867

默认构造函数详解

错误认识1:若程序员没有自己定义无参数的构造函数,那么编译器会自动生成默认构造函数,来进行对成员函数的初始化。错误认识2:编译器合成出来的default constructor会明确设定'“class内每一个data member的默认值”。但这两种种认识是有误的,不全面的。正确认识:默认构造函数分为有用的和无用的,所谓无用的默认构造函数就是一个空函数、什么操作也不做,而有用的默认构造函数是可以...

coolwriter的博客 2万+

类的默认构造函数

如果没有为一个类显式地定义任何构造函数,编译器将自动为这个类生成默认构造函数。 由编译器创建的默认构造函数称为合成的默认构造函数,它将依据如下规则初始化类中的成员变量: 1.内置数据类型的初始化 内置数据类型是否自动初始化取决于变量定义的位置。如果变量在全局作用域内定义(即不在任何函数中)或定义为静态局部变量,则这些成员将被初始化为0。如果变量在局部作用域内定义,则这些成员没有初始化。 2

菜鸟达人 1万+

C++默认构造函数

之前一直以为C++默认构造函数,只要我们没有主动添加,编辑器都会默认合成。原来不是这样子的。而只在编译器需要的时候产生出来。具体是在什么时候需要?产生出来做什么事情?下面来看几个例子。 exp1: class Foo { public: int a; int b}; void main() { Foo foo; if(foo.a == 0) //do something ... }

maple1149的博客 966

66 C++对象模型探索。C++编译器在什么时候给我们创建默认构造函数

每个.cpp文件都会编译生成一个.obj文件,或者一个.o文件windows : vs2017生成.obj文件linux : linux生成.o文件我们可以通过工具分析这个.obj文件,检查是否有构造函数生成public:cout << "teacher10 的构造函数被调用"<<endl;

hunandede的博客 870
上一篇: 【C++】构造函数不能为哪些情况
下一篇: 【C++】析构函数详解
信手斩龙
博客等级 码龄7年 13粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值