首页 > 后端开发 > C++ > 为什么在 C 中分配给现有对象时不调用复制构造函数?

为什么在 C 中分配给现有对象时不调用复制构造函数?

DDD
发布: 2024-12-08 09:22:11
原创
582 人浏览过

Why Isn't the Copy Constructor Called When Assigning to an Existing Object in C  ?

为什么在为现有对象分配新值时会绕过复制构造函数

在提供的代码片段中,对象 a 被初始化为值 5。标准 A 构造函数按预期调用。然而,与假设相反的是,在对新构造的对象进行赋值时,并没有调用复制构造函数。

这种行为既不是编译器优化的结果,也不是语言规范中的遗漏。它在 C 标准中明确记录(§12.8.15,第 211 页)。该标准规定以下赋值在语义上是等价的“完全可以接受”:

T = x;
T(x);
登录后复制

从逻辑上讲,可以从代码优化中删除像 T(T(x)) 这样的冗余赋值。因此,编译器会自动调用默认构造函数来初始化 a,然后直接对新构造的对象进行赋值。

要强制调用复制构造函数,需要在赋值之前显式默认构造 a:

A a; // Default-construct 'a'

// Copy constructor will be called to
// copy data from the newly constructed object.
a = A(5);
登录后复制

以上是为什么在 C 中分配给现有对象时不调用复制构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板