gpt4 book ai didi

c++ - 什么是 std::pair?

转载 作者:IT老高 更新时间:2023-10-28 14:01:01 25 4
gpt4 key购买 nike

std::pair 有什么用,我为什么要使用它,boost::compressed_pa​​ir 带来什么好处?

最佳答案

compressed_pair使用一些模板技巧来节省空间。在 C++ 中,一个对象(小 o)不能与不同的对象具有相同的地址。

所以即使你有

struct A { };

A的大小不会为 0,因为那时:

A a1;
A a2;
&a1 == &a2;

会保持,这是不允许的。

但是很多编译器会做所谓的“空基类优化”:

struct A { };
struct B { int x; };
struct C : public A { int x; };

这里,B 没问题和 C具有相同的大小,即使 sizeof(A)不能为零。

所以 boost::compressed_pair利用这种优化,并在可能的情况下从该对中的一个或另一个类型继承(如果它为空)。

所以一个 std::pair可能看起来像(我省略了很多,ctors 等):

template<typename FirstType, typename SecondType>
struct pair {
FirstType first;
SecondType second;
};

这意味着如果 FirstTypeSecondTypeA , 你的 pair<A, int>必须大于 sizeof(int) .

但是如果你使用 compressed_pair ,其生成的代码将类似于:

 struct compressed_pair<A,int> : private A {
int second_;
A first() { return *this; }
int second() { return second_; }
};

还有 compressed_pair<A,int>只会和 sizeof(int) 一样大。

关于c++ - 什么是 std::pair?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/97948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com