在 C++ 中,如果定义了构造函数,则创建对象时先执行完缺省的构造函数,再执行这个定义的构造函数。( )
这题考构造函数生成规则。拿到题先想:用户定义构造函数后,编译器还不会自动生成缺省构造函数吗?不会。所以'先执行缺省构造函数'这半句直接从根上错了。
学生容易把'默认参数'和'默认构造函数'混为一谈,以为写了构造函数就有缺省构造函数;或者死记'有用户定义构造函数就没有缺省构造函数'却忘了前提是缺省构造函数必须无参且未定义。命题人爱用'缺省的构造函数'这种绝对化表述挖坑,让你以为它在说'无参构造函数',其实它是在说'编译器默认生成的那个',而这个默认生成的动作已经被你的用户定义构造函数给取消了。
C++ 构造函数规则:当类中定义了任意构造函数(哪怕带默认参数),编译器就不再自动生成缺省构造函数(即无参构造函数)。缺省构造函数本质是"无参且未被用户定义"的构造函数,它不是"默认存在"的,而是"默认生成"的;一旦你写了构造函数,"默认生成"这一步就被跳过。
命题人故意把"缺省构造函数"和"默认参数"的概念揉在一起,利用学生只背结论不追根究底的毛病:结论"有用户定义构造函数就没有缺省构造函数"是对的,但"缺省构造函数"这个名词本身在语境里指"编译器默认生成的无参构造函数"。题目说"先执行完缺省的构造函数",等于默认那个无参构造函数被调用了,这直接违背了生成规则。这种绝对化表述是典型挖坑手法。
拿到题先想:用户定义构造函数后,编译器还不会自动生成缺省构造函数吗?不会。所以"先执行缺省构造函数"这半句直接从根上错了。再看后半句"再执行这个定义的构造函数",逻辑上也不成立,因为没有缺省构造函数可执行,自然谈不上"先执行完"。
学生常错选 A,原因有二:一是把"默认参数"当成"缺省构造函数",以为写了构造函数就有缺省构造函数;二是死记"有用户定义构造函数就没有缺省构造函数"却忘了前提是缺省构造函数必须无参且未定义。命题人爱用"缺省的构造函数"这种绝对化表述挖坑,让你以为它在说"无参构造函数",其实它是在说"编译器默认生成的那个",而这个默认生成的动作已经被你的用户定义构造函数给取消了。
本题属于 C++ 构造函数生成规则,GESP 七级考过 91 题,C++ 相关题目在七级占比约 15%,是七级必考知识点之一。从历年分布看,2023 年 C++ 类题目有 287 题,2024 年 413 题,2025 年 401 题,趋势是 C++ 题目持续增加,构造函数规则作为基础考点,未来仍会高频出现,命题人可能继续用"缺省构造函数""默认参数"等概念混淆来挖坑。
暂无足够依据预测未来具体怎么考,但可以预见:命题人仍会围绕"用户定义构造函数后缺省构造函数是否生成"这一核心规则出题,形式可能更隐蔽,比如结合默认参数、类模板或继承场景,要求判断构造顺序或初始化列表。