You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何以下代码会调用拷贝构造函数?所有参数均按引用传递

问题原因解析

你看到的拷贝构造触发,和引用传递、lambda捕获没有关系,问题出在vector<A> vec = {12,4};这一行的初始化逻辑上:

  • 当用初始化列表{12,4}初始化vector时,第一步会先把列表里的每个数值转换成临时的A对象:分别调用A(12)和A(4)构造函数。
  • 接下来vector需要把这些临时对象存入自身的内存空间,这时候就会将临时对象拷贝到vector的元素位置上,因此触发两次A的拷贝构造函数。

后面的for循环里,lambda只是捕获了vector元素的引用,并没有拷贝A对象,所以这部分不会产生拷贝构造的调用。

内容的提问来源于stack exchange,提问作者uiop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:17:06