std::min/std::max只保证进行一次求值的结果

5
C++标准是否保证调用:
c = std::min(f(x), g(x));

函数f和g只被评估一次吗?

1个回答

13

是的。因为std::min是一个函数,所以f(x)和g(x)只会被计算一次。而返回的值也不会被复制。请看该函数的原型:

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

这与预处理器真正定义的min宏有明显的区别:

#define MIN(A,B) ((A)<(B))?(A):(B)

嗯...是否有可能实现一个 #define 版本的 min 函数,并确保每个函数只被调用一次?只是好奇... - Alexander Rafferty
为了完整起见:您不能假定方法的评估顺序,这是未指定的。例如,gcc通常从右到左评估参数。 - Matthieu M.
@Alexander Rafferty:如果可能的话,现有的MIN实现可能已经完成了。对于几十年来,MIN参数的双重评估一直是程序员的一个难题。 - Constantin
2
@Alexander:#define 版本的 min/max,评估其参数一次是可能的,但它仍然会包含潜在比较不兼容数据类型的问题。Linux 有 GCC 特定实现的min/max类型安全的定义 - Dummy00001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接