免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: daiyihang
打印 上一主题 下一主题

[C++] 求教 c++ 返回值问题 (如何返回两个值?) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-11-21 23:50 |只看该作者
>> 也没到“不得已”的情况吧,没那么严重

如果不讲究程序的执行效率、或者这种效率提高对程序无足轻重的话,这么说也没错。

不过应该清楚一个基本事实:返回结构的函数(包括 std::pair 以及 std::tr1::tuple)、无论怎样优化、其效率也不会超过通过指针或者引用传递的函数。

>> STL内部使用pair的地方很多啊,关联容器几乎都用到pair,pair本身就是一个结构体,效率不低。

标准库中用到 std::pair 的地方是很多,但绝大多数都是作为函数的参数进行引用传递的,不属于我们在这里讨论的情况,所以可首先排除在外。这样,你会发现函数返回类型为 std::pair 的情况其实屈指可数。我所知道的有 map 和 set 容器中的 insert() 和equal_range() 成员函数,它们直接返回 std::pair。因为在这两类成员函数中直接返回而不是通过指针或者引用传递 std::pair 对象,说明了在这里执行效率不是起决定作用的因素。至于这么做的真正原因,如果有兴趣可以研究一下。

>> 其它的两个算法,很容易在线化。

我知道你这里说的“在线”指的是“inline”,是 inline function 中的 inline。可惜这实在是个莫名其妙的译法。Inline 不是 online(在线),inline 也从来不是“online” 和“在线”的意思。

比较常见的翻译是“内联”。虽然不是太确切,这种译法接受的人比较多,众口铄金啊。个人认为“inline function”翻译为“展开函数”似乎更加贴切些。

>> 说的是。加上 tr1::tuple

和std::tr1::tie 结合起来使用能够从函数中返回任意数目的值(包括函数参数之外的值)给指定的变量,其使用方便灵活是它的魅力。

不过,如果需要从函数中传出的值恰好都能够指定给函数实参的话,应该优先通过参数进行引用或者指针传递。例如:

template <class Type>
void absolute ( Type& x, Type& y)



template <class Type>
std::tr1::tuple<Type, Type> absolute ( Type x, Type y)

要简洁高效。

论坛徽章:
0
12 [报告]
发表于 2006-11-22 12:45 |只看该作者
没必要写函数

论坛徽章:
0
13 [报告]
发表于 2006-11-22 14:00 |只看该作者
用引用就可以了,没必要那么麻烦,不过whyglinux 的总结看看还是有所助益的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP