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

rub*_*nvb 10 c++ boost tuples

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

对文档的引用:compressed_pairtuple.

Dre*_*ann 18

C++要求所有类型的大小大于0如果一个类型可以有一个大小为0,数组索引和其他指针数学会出差错.

class EmptyClass { };

std::cout << sizeof( EmptyClass );  // Prints "1" (typically)
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • @ 0x499602D2哦 - 它通过将每个类型放在一个包装类中并且在这种情况下让`int`包装器继承自`EmptyClass`包装器来实现它.见:http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Empty_Base_Optimization (2认同)