13

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

为什么 C++ 标准库不包括以下非 const 重载std::min(同样对于std:max)?

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

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

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

这种过载会导致任何问题吗?

4

1 回答 1

13

这是 Howard E. Hinnant 在N2199: "Improved min/max"中提出的,根据这个讨论被拒绝了。

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

当时认为实施过于复杂。虽然我没有尝试过,但几乎可以肯定,在今天的语言/库中可以更简单地完成它。至少现在实现中所谓的“promote”被称为“std::common_type”。

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

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

正如 TC 在同一讨论中提到的那样,提案也需要不破坏代码,例如:

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

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

于 2018-09-27T11:17:46.923 回答