为何以下代码会调用拷贝构造函数?所有参数均按引用传递
问题原因解析
你看到的拷贝构造触发,和引用传递、lambda捕获没有关系,问题出在vector<A> vec = {12,4};这一行的初始化逻辑上:
- 当用初始化列表
{12,4}初始化vector时,第一步会先把列表里的每个数值转换成临时的A对象:分别调用A(12)和A(4)构造函数。 - 接下来vector需要把这些临时对象存入自身的内存空间,这时候就会将临时对象拷贝到vector的元素位置上,因此触发两次A的拷贝构造函数。
后面的for循环里,lambda只是捕获了vector元素的引用,并没有拷贝A对象,所以这部分不会产生拷贝构造的调用。
内容的提问来源于stack exchange,提问作者uiop
相关产品推荐
相关产品推荐

