为什么不调用复制构造函数?

2023-12-07

class MyClass
{
public:
  ~MyClass() {}
  MyClass():x(0), y(0){} //default constructor
  MyClass(int X, int Y):x(X), y(Y){} //user-defined constructor
  MyClass(const MyClass& tempObj):x(tempObj.x), y(tempObj.y){} //copy constructor

private:
  int x; int y;
};

int main()
{
  MyClass MyObj(MyClass(1, 2)); //user-defined constructor was called.
  MyClass MyObj2(MyObj); //copy constructor was called.
}

在第一种情况下,当MyClass(1, 2)调用用户定义的构造函数并返回一个对象,我期待着MyObj调用复制构造函数。为什么不需要为第二个实例调用复制构造函数MyClass?


每当创建临时对象的唯一目的是复制并随后销毁时,编译器就可以完全删除临时对象并直接在接收者中构造结果(即直接在应该接收副本的对象中)。在你的情况下

MyClass MyObj(MyClass(1, 2));

可以转化为

MyClass MyObj(1, 2);

即使复制构造函数有副作用。

这个过程称为省略复制操作。它在语言标准12.8/15中有描述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不调用复制构造函数? 的相关文章

随机推荐

  • 如何将 int[] 类型转换为 int?[]

    我正在使用 linq 查询来输出 int 数组 但我需要将其传递给仅接受 int 的方法 因此 在搜索了将 int 转换为 int 的方法之后 我发现了一些似乎可行的方法here 以下代码是一个简化的示例 显示了哪些内容有效 哪些无效 us
  • 如何以编程方式在 Windows 8 开始屏幕上放置磁贴?

    我正在构建一个 Windows 商店应用程序 我希望该应用程序的磁贴位于我的开始屏幕的特定位置 是否有任何 API 可以对我的图块在开始屏幕上的位置进行编码 提前致谢 不 您无法控制图块的移动位置 这由用户决定 Windows 8 环境设计
  • 如何将heroku 上回形针的上传目录更改为/tmp?

    我需要上传文件 然后使用回形针解析它们 目前它上传到 system文件夹中 这在heroku中是不允许的 我不需要持久上传 我解析它然后存储它们 所以我希望能够保存到 tmp 中然后解析 然后让它稍后被吹走 关于如何做到这一点的想法 如果我
  • 如何在R中两个单词之间的文本上进行gsub?

    EDIT 我想放置一个 n在我的文本中特定的未知单词之前 我知道这个未知词第一次出现在我的文本中将会在 树 和 湖 之间 前任 文本 text 1 TreeRULakeSunWater 2 A B C D EDIT 树 和 湖 永远不会改变
  • 地图不适用于加载的 Obj

    这是我之前的问题的延续here 我只是尝试向该对象的每一侧应用不同的纹理 但什么也没有出现 没有控制台错误 我相信我正在按正确的顺序应用事物 这应该很简单 但过去一个小时我一直在努力解决这个问题 下面是一个代码示例 function onL
  • Google Apps - 使用昵称发送电子邮件

    我在 google apps u 中有一个电子邮件帐户 电子邮件受保护 它有一个昵称 电子邮件受保护 我可以从 发送电子邮件吗 电子邮件受保护 多谢 确实 Google Apps 支持从您拥有的任何电子邮件地址 包括昵称 发送邮件 登录您的
  • 了解多重索引

    所以我在 csv 中有一个这样的示例数据集 name team date score John A 3 9 12 100 John B 3 9 12 99 Jane B 4 9 12 102 Peter A 9 9 12 103 Josie
  • 如何使用 Ember Data 查找模型?

    相当于什么 App Person find age 30 in the 新的 Ember 数据 IE 如何根据属性获取记录数组 ember data 1 0 0 beta2 中的等效方法现在是 this store find person
  • Java 中的 Context 到底是什么? [复制]

    这个问题在这里已经有答案了 我用 Google 搜索了这个并阅读了 Java 文档 但我有点困惑 有人可以解释一下什么是Context是简单的英语吗 用编程术语来说 它是较大的周围部分 可以具有any对当前工作单元的行为的影响 例如 使用的
  • 不处理条件渲染组件中的表单提交

    我有一个带有表单的自定义标记文件
  • 如何解码gzip数据?

    我有一个变量data 变量的类型为 TIdBytes 变量包含一些用 gzip 编码的数据 如何解码这些数据 如果您想手动解码数据 请查看DecompressGZipStream 的方法TIdCompressorZLib组件 或TDecom
  • 分子测试似乎忽略了ansible.cfg的remote_tmp设置

    我正在尝试使用molecule测试一个非常基本的角色 venv red jumphost docker ops cat roles fake role tasks main yml tasks file for fake role name
  • 在 ruby​​ 中从自身获取实例变量名称

    我有一个实例变量 foo我想写一些代码来获取字符串 foo 有什么提示吗 如果您拥有的只是对该对象的引用 那么您就无法真正干净利落地完成它 def foo bar something end def bar value value no c
  • DATA 和 IMAGE 填充在两行中。我想将它们绑定在一行中

    我要第二次问这个问题 我会把它说清楚 这样你就可以帮助我 好吧 让我们开始吧 我有一个注册流程 我把这个过程分成了两页 第一页仅用于 个人信息 然后 当我单击下一步按钮时 将出现下一页 postbackURL 此页面用于 上传照片 页面 他
  • Scrapy CLOSESPIDER_PAGECOUNT 设置无法正常工作

    我使用 scrapy 1 0 3 无法发现 CLOSESPIDER 扩展是如何工作的 对于命令 scrapy 抓取domain links set CLOSESPIDER PAGECOUNT 1 正确的是一个请求 但对于两页计数 scrap
  • javaFx 中更新 java-124 版本后如何解析 tableview 中的嵌套列?

    Exception in thread JavaFX Application Thread java lang NullPointerException at com sun javafx scene control skin Nested
  • 父类是否应该引用子类?

    早上好 我在工作中继承了一些遗留代码 它使用了一种相当不寻常的设计模式 我在论坛上找到的类似模式的唯一参考是here 情况是原始设计者有一个通用父类 不是抽象 它有一个直接引用子类的静态工厂方法 以下是这种编码风格的示例 可以在遗留代码的多
  • Google 的抓取工具可以解释 Javascript 吗?如果我通过 AJAX 加载页面怎么办? [关闭]

    Closed 这个问题是无关 目前不接受答案 当用户进入我的页面时 我必须进行另一个 AJAX 调用 以加载 div 内的数据 这就是我的应用程序的工作原理 问题是 当我查看这段代码的源代码时 它不包含该 AJAX 的源代码 当然 当我执行
  • InvalidCastException:无法将类型“System.DBNull”的对象转换为类型“System.Nullable`1[System.Int32]”[重复]

    这个问题在这里已经有答案了 我正在尝试从数据库执行存储过程 但是 我遇到了一个例外 InvalidCastException 无法将 System DBNull 类型的对象转换为 输入 System Nullable 1 System In
  • 为什么不调用复制构造函数?

    class MyClass public MyClass MyClass x 0 y 0 default constructor MyClass int X int Y x X y Y user defined constructor My