元组和compressed_pa​​ir之间有什么区别?

时间:2013-04-24 18:06:15

标签: c++ boost tuples

我看到两者都用于同一目的,但我想知道结果会有什么不同(如果有的话)以及为什么会这样使用。

参考文档:compressed_pairtuple

1 个答案:

答案 0 :(得分:17)

C ++要求所有类型的大小都大于0.如果类型 的大小为0,那么数组索引和其他指针数学就会出错。

class EmptyClass { };

std::cout << sizeof( EmptyClass );  // Prints "1" (typically)

compressed_pair是两个元素的元组,经过优化,不需要额外存储一个只有大小为1的类型,因为大小为0是禁止的。

if ( sizeof( compressed_pair<int,EmptyClass> ) == sizeof(int) )
{
   std::cout << "EmptyClass was compressed.";  // (This will print)
}

这是通过Empty Base Optimization实现的。两种类型都放在一个类包装器中,如果一个类型为“空”,那么该类将成为另一个类的父类。