为什么对std :: tuple实现使用递归继承不好?

Joh*_*itb 23 c++ c++11 stdtuple

这个问题上,Howard Hinnant说

std :: tuple的一些实现使用递归继承.但好的却没有.;-)

有人可以对此有所了解吗?

How*_*ant 30

非递归实现具有更好的编译时性能.信不信由你,在一个使用频繁的图书馆设施中std::tuple,如何实施它会影响(无论好坏),客户看到的编译时间.递归实现往往会产生在递归深度上呈线性的编译时间(或者可能更糟).

这不仅仅影响元组本身的实例化. std::get<I>(tuple)例如,对于一个实现,将花费一定量的编译时间,对于另一个实现,将花费一定量的编译时间.在处理元组元组时,这种影响会迅速恶化(或不会).即递归实现可能导致O(N ^ 2)编译时间,而非递归实现仍然是O(1).

Fwiw,libc ++实现以客户端指定的顺序放置对象,但使用编译器的空基类优化工具优化了空组件的空间.

  • 这个问题(和你的答案)促使我探索非递归元组实现.我写了一篇关于它的帖子:http://mitchnull.blogspot.com/2012/06/c11-tuple-implementation-details-part-1.html.如果你能节省一点时间阅读它并指出任何错误,我将不胜感激.谢谢 (2认同)