元组和compressed_pair有什么区别?

What's the difference between a tuple and a compressed_pair?

本文关键字:什么 区别 pair compressed 元组      更新时间:2023-10-16

我见过两者都用于相同的目的,但我想知道结果会有什么不同(如果有的话),以及为什么要使用它。

参考文档:compressed_pairtuple

c++要求所有完整类型的size必须大于0。如果类型可以的大小为0,数组索引和其他指针数学将出错。

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

一个boost::compressed_pair是由两个元素组成的元组,对于一个只有1大小的类型不需要额外的存储空间,因为0的大小是禁止的。

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

这是通过空基优化实现的。这两种类型都放在一个类包装器中,如果其中一种类型为"空",则该类成为另一种类型的父类。