我已经看到两者都用于相同的目的,但是我不知道结果会如何不同(如果有的话)以及为什么将其全部使用。
对文档的引用: compressed_pair
和 tuple
。
最佳答案
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实现的。两种类型都放入类包装器中,并且如果一种类型为“空”,则该类成为另一种的父类。