gpt4 book ai didi

c++ - 完美的一对

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:13 25 4
gpt4 key购买 nike

灵感来自 this question我开始思考完美的 std::pair 应该是什么样子。压缩对类(例如 boost's )提供了一个对,当其类型之一是空类时,其大小会减小。压缩对需要 getter(first()second())来隐藏具有空类型的成员不存在的事实。

其次,根据C++ docs :“对是元组的特例”,但它们是作为一个单独的类实现的。为什么不使用部分模板特化,例如

template <typename ...Args> class tuple {};
template <typename T1, typename T2> class tuple<T1, T2> {}; // Implements a compressed pair
template <typename T1, typename T2> using pair = tuple<T1, T2>;

此外,为了提供更统一的 API,可以为 pair 重载 std::getstd::set,并放弃first()second() 访问器。或者两者兼而有之 :)

问题

  1. 为什么 std::pair 不是 std::tuple 的特化?

  2. 什么时候可以使用 std::pair 而不是压缩对?即使有情况,默认的应该是压缩对吗?

  3. 为什么没有压缩元组类?

最佳答案

  1. pair早于 tuple好 10 年。它作为一个单独的类存在,主要是由于历史原因和向后兼容性。对其进行重大更改带来的麻烦多于它的值(value)。如果有人想要包含两个元素的元组,他们可以只使用包含两个元素的元组。

  2. 我在使用非人工示例时遇到问题,我认为唯一真正的原因是使用标准库类,并向后兼容假定 sizeof(pair<A,B>) >= sizeof(A) + sizeof(B) 的代码和类似的。

  3. 没有 compressed_tuple作为std::tuple已经在每个值得他们努力的标准库实现中执行 EBO。

关于c++ - 完美的一对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37853438/

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