函数返回std::vector<std::wstring>类型变量时,发生了什么

 可以先看这篇,说明了右值赋值构造函数存在的意义: CSDN

返回vector的左值

std::vector<int> foo1()
{
	std::vector<int> v;
	return v;
}

int main()
{
	std::vector<int> v = foo1();
	return 1;
}

果然进了右值赋值构造函数里,都说面对函数内部返回的对象,都会进行优化。

优化的途径就是走右值?

大家口中所说编译器进行了优化,可能就是指的这种情况。

最后走了swap,内部存储的wstring并没有参与什么:

返回vector的右值

要是用return  std::vector<int>{};

情况就有所不同了

std::vector<int> foo1()
{
	//std::vector<int> v;
	//return v;
	return std::vector<int>{};
}
int main()
{
	std::vector<int>&& v = foo1();
	return 1;
}

就不会走vector的右值赋值构造函数。整个过程就初始化了一次vector。

如果不用&&接住右值呢

奇怪的事情发生了,这种情况下和《返回vector的右值》的效果一样

可能所说的RVO是这样的,编译器进行了优化。

std::vector<int> foo1()
{
	//std::vector<int> v;
	//return v;
	return std::vector<int>{};
}
int main()
{
	std::vector<int> v = foo1();
	return 1;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值