为什么C ++标准库不包含std :: min,std :: max的非const版本?

时间:2018-09-27 11:09:42

标签: c++

我隐约记得我在某处看到过讨论,但现在找不到了。 “ non-const min max c ++”和类似的变体没有给出相关结果。

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

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

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

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

这种超载会引起任何问题吗?

1 个答案:

答案 0 :(得分:13)

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

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

  

当时认为实施过于复杂。虽然   我没有尝试过,几乎可以肯定,   当今的语言/图书馆。至少所谓的“促进”   今天在实现中称为“ std :: common_type”。

     

部分复杂之处在于我试图解决一些问题   同时:

     
      
  1. 能够分配给min的结果(但只有在安全的情况下才可以)。
  2.   
  3. 在编译时消除悬而未决的参考危险。
  4.   
  5. 支持异构积分比较,在编译时清除危险的组合。
  6.   
  7. 支持仅移动类型。
  8.   

作为T.C.在同一讨论中提到,建议也不必破坏代码,例如:

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

如果您有兴趣解决讨论中提到的问题并编写提案和示例实现,那么最终可以将其纳入标准。