我隐约记得我在某处看到过讨论,但现在找不到了。 “ non-const min max c ++”和类似的变体没有给出相关结果。
为什么C ++标准库不包含以下std::min
的非常量重载(对于std:max
同样如此)?
template <typename T>
T& min(T& a, T& b);
有时可能有用,例如如果我想增加较低的数字:
std::min(x, y) += 1;
这种超载会引起任何问题吗?
答案 0 :(得分:13)
这是Howard E. Hinnant在N2199: "Improved min/max"中提出的,根据this discussion,该提议被拒绝了。
在同一次讨论中,霍华德将这些作为拒绝的原因:
当时认为实施过于复杂。虽然 我没有尝试过,几乎可以肯定, 当今的语言/图书馆。至少所谓的“促进” 今天在实现中称为“ std :: common_type”。
部分复杂之处在于我试图解决一些问题 同时:
- 能够分配给min的结果(但只有在安全的情况下才可以)。
- 在编译时消除悬而未决的参考危险。
- 支持异构积分比较,在编译时清除危险的组合。
- 支持仅移动类型。
作为T.C.在同一讨论中提到,建议也不必破坏代码,例如:
int i = 1; std::min(i, 0);
如果您有兴趣解决讨论中提到的问题并编写提案和示例实现,那么最终可以将其纳入标准。