我已经看到两者都用于相同的目的,但我想知道结果会有什么不同(如果有的话)以及为什么要使用它。
对文档的引用:compressed_pair
和tuple
.
C++ 要求所有完整类型的大小都大于 0。如果一个类型的大小可以为 0,那么数组索引和其他指针数学就会出错。
class EmptyClass { };
std::cout << sizeof( EmptyClass ); // Prints "1" (typically)
Aboost::compressed_pair
是一个由两个元素组成的元组,对于一种只有 1 大小的类型不需要额外的存储空间,因为禁止使用 0 的大小。
if ( sizeof( compressed_pair<int,EmptyClass> ) == sizeof(int) )
{
std::cout << "EmptyClass was compressed."; // (This will print)
}
这是通过空基优化实现的。两种类型都放在一个类包装器中,如果一种类型是“空的”,则该类成为另一个的父类。