函数返回引⽤时,返回值不需要另外申请临时对象,直接返回引⽤本⾝,⼤⼤节省了程序执⾏效率. 但是函数返回引⽤后,直接赋值给引⽤对象和⾮引⽤对象也是很重要的⼀点,直接看下⾯例⼦:
#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约束.