【发布时间】:2010-11-29 08:33:43
【问题描述】:
根据boost::tuple documentation,访问元组的单个元素与访问成员变量具有相同的性能。例如,给定以下声明:
tuple<A, B, C> t1(A(), B(), C());
struct T { A a; B b; C c; }
T t2;
这两个语句的性能应该相同(或差异可以忽略不计):
t1.get<2>();
t2.c;
我查看了 boost::tuple 的来源,如果我理解正确(我不确定我是否理解),get<N> 函数实际上执行了这个操作:
C get<2>(tuple<A, B, C>& t)
{
return t.tail.tail.head;
//Generally: return t.tail. <<N times>> .head;
}
这更像是在链表中查找而不是直接访问,并且据我所知,它具有 O(N) 复杂度,而不是 O(1),这是成员访问所期望的。从我过去使用 boost 的经验来看,我认为我理解错了。但我的错误是什么? get 到底是如何工作的?
【问题讨论】:
-
我猜这很大程度上依赖于编译时优化
标签: c++ templates boost boost-tuples