【问题标题】:Why doesn't the C++ standard library include a non-const version of std::min, std::max?为什么 C++ 标准库不包含非 const 版本的 std::min、std::max?
【发布时间】:2019-03-03 06:52:43
【问题描述】:

我依稀记得我在某个地方看到过关于此的讨论,但我现在找不到; "non-const min max c++" 和类似的变体没有给出相关结果。

为什么 C++ 标准库不包含 std::min 的以下非常量重载(std:max 也是如此)?

template <typename T>
T& min(T& a, T& b);

它有时会很有用,例如如果我想增加较低的数字:

std::min(x, y) += 1;

这种过载会导致什么问题吗?

【问题讨论】:

标签: c++


【解决方案1】:

这是由 Howard E. Hinnant 在N2199: "Improved min/max" 中提出的,根据this discussion 被拒绝。

在同一次讨论中,霍华德提到了这些作为拒绝的原因:

当时认为实施过于复杂。尽管 我没有尝试过,几乎可以肯定它可以更简单地完成 今天的语言/图书馆。至少所谓的“推广” 在今天的实现中称为“std::common_type”。

部分复杂性是我试图解决几个问题 同时:

  1. 能够分配到 min 的结果中(但只有在安全的情况下才能这样做)。
  2. 在编译时消除悬空引用的危险。
  3. 支持异构积分比较,在编译时清除危险组合。
  4. 支持仅移动类型。

作为 T.C.在同一讨论中提到,提案也需要不破坏代码,例如:

int i = 1; std::min(i, 0);

如果您有兴趣解决讨论中提到的问题并编写提案 + 示例实现,那么这最终可能会成为标准。

【讨论】:

  • 很简单,叫它minref,不要重载min
  • @Cheersandhth.-Alf:这个名字似乎暗示min 不返回引用。
  • 那就叫它minnonconstref:P
  • 有没有讨论过为什么第一个版本的 min/max 没有提供这个功能?简单的监督?
  • @engf-010 - 这是an issue,但不是这里的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2011-11-24
  • 2020-10-29
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
相关资源
最近更新 更多