- 论坛徽章:
- 0
|
>> 也没到“不得已”的情况吧,没那么严重
如果不讲究程序的执行效率、或者这种效率提高对程序无足轻重的话,这么说也没错。
不过应该清楚一个基本事实:返回结构的函数(包括 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)
要简洁高效。 |
|