c++函数返回引用,并赋值给引用对象

c++函数返回引⽤,并赋值给引⽤对象
函数返回引⽤时,返回值不需要另外申请临时对象,直接返回引⽤本⾝,⼤⼤节省了程序执⾏效率.
但是函数返回引⽤后,直接赋值给引⽤对象和⾮引⽤对象也是很重要的⼀点,直接看下⾯例⼦:
#include<iostream>
#include<vector>
#include<chrono>
using namespace std;
std::vector<double> v1;
std::vector<double> v2;
std::vector<double>&fun1()
{
return v1;
}
int main()
{
for(unsigned int i=0; i<1e6;++i)
{
v1.push_back(i);
}
double time_1 =0;
double time_2 =0;
std::chrono::steady_clock::time_point sum_1;
std::chrono::steady_clock::time_point sum_2;
压力表接头for(int i=0; i<1e4;++i)
拼装式冷库
{
sum_1 = std::chrono::steady_clock::now();
std::vector<double> vv1 =fun1();
sum_2 = std::chrono::steady_clock::now();
std::chrono::duration<double> sum_used_time = std::chrono::duration_cast<std::chrono::duration<double>>(sum_2 - sum_1);  time_1 += sum_unt();
}
std::cout <<"sum used time1(s): "<< time_1 << std::endl;
for(int i=0; i<1e4;++i)
{
sum_1 = std::chrono::steady_clock::now();
std::vector<double>& vv2 =fun1();
sum_2 = std::chrono::steady_clock::now();
自熟粉丝机
std::chrono::duration<double> sum_used_time = std::chrono::duration_cast<std::chrono::duration<double>>(sum_2 - sum_1);  time_2 += sum_unt();
螺钉连接}
std::cout <<"sum used time2(s): "<< time_2 << std::endl;无心磨床调机方法
5g怎么做return0;
}
最终执⾏结果为:
sum used time1(s): 4.97475
sum used time2(s): 0.000171595
从此可以看出,
(1) 如果函数返回的对象不是引⽤的情况时,
std::vector vv1 = fun1();
在返回时,虽然函数中不需要另外构造⼀个临时的对象,但是需要将函数中v1的数据全部赋值给vv1, 当数据量很⼤时,这也⾮常耗时的.该操作相当于:
std::vector vv1 = v1;
(2) 如果函数返回的对象是引⽤的情况时,
std::vector& vv2 = fun1();
在返回时,v1赋值给⼀个引⽤,相当于vv2是v1的⼀个别名,这个操作很快,该操作相当于:
std::vector& vv2 = v1;
但是如果修改vv2的值,v1也会相应的改变,因此很多时候,在使⽤类成员函数返回类的成员函数变量的引⽤时,需要⽤const约束.

本文发布于:2024-09-23 13:29:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/166611.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   操作   返回   需要   对象   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议