栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Modern C++程序设计:直接返回数据,而不用输入引用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Modern C++程序设计:直接返回数据,而不用输入引用

当返回类型不像整型那样简单的复杂对象时,在C++11以前的传统C++,我们倾向以下面的

fun1形式实现,因为fun2 有拷贝代价。

 void fun1(std::vector & ret) {
     // 运算赋值
     ret.push_back(1);
     ret.push_back(2);
 }

 std::vector fun2() {
     std::vector vect;
     vect.push_back(1);
     vect.push_back(2);
     return vect;
 }

Modern C++ 风格,倾向以fun2的形式,因为默认有RVO(Return Value Optimization, 即返回值优化),避免了拷贝,没有性能损失。并且外界可以使用auto类型推导。

 auto  vect=fun2();

RVO是编译层的优化,编译碰到返回内部的变量,会把变量声明移外部,这样就不需要拷贝了。有兴趣者,可以跟踪指针在栈中位置证实这点。

若是复杂类型,效果更明显。如C++标准库中,得到时间

   auto start1 = std::chrono::system_clock::now();

start其实是很长的类型 std::chrono::time_point ,如果直接去声明,很繁琐。可以视为内部类型。

  std::chrono::time_point](http://en.cppreference.com/w/cpp/chrono/time_point)

 

参考:

[system_clock] https://en.cppreference.com/w/cpp/chrono/system_clock/now

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857484.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号