Fir*_*his 6 c++ templates boost boost-tuples
根据boost :: tuple文档,访问元组的单个元素与访问成员变量具有相同的性能.例如,给出以下声明:
tuple<A, B, C> t1(A(), B(), C());
struct T { A a; B b; C c; }
T t2;
Run Code Online (Sandbox Code Playgroud)
这两个陈述应该具有相同(或可忽略不计的差异)的表现:
t1.get<2>();
t2.c;
Run Code Online (Sandbox Code Playgroud)
我查看了boost :: tuple的来源,如果我理解正确(我不确定),get<N>函数实际执行此操作:
C get<2>(tuple<A, B, C>& t)
{
return t.tail.tail.head;
//Generally: return t.tail. <<N times>> .head;
}
Run Code Online (Sandbox Code Playgroud)
这更类似于链接列表中的查找而不是直接访问,并且,据我所知,具有O(N)复杂度而不是O(1),这是从成员访问期望的.根据我过去的经验,我认为我错了; 但是我的错误是什么?如何get真正发挥作用?
你对列表般的表现是正确的.但是,它可以在编译时解析,因此可以在运行时归结为O(1).(给出足够好的优化编译器.)