只有一个评估保证std :: min/std :: max

Mic*_*Ulm 3 c++ stl

C++标准是否保证了呼叫

c = std::min(f(x), g(x));
Run Code Online (Sandbox Code Playgroud)

只评估函数f和g一次?

Ben*_*oît 12

是.由于std :: min是一个函数,因此f(x)和g(x)只会被计算一次.并且不会复制返回的值.查看函数的原型:

template<typename T>     
const T& min ( const T& a, const T& b );
Run Code Online (Sandbox Code Playgroud)

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

#define MIN(A,B) ((A)<(B))?(A):(B)
Run Code Online (Sandbox Code Playgroud)

  • @Alexander:#define版本的min/max,可以一次评估它的params,但它仍然包含可能比较不兼容数据类型的问题.Linux具有[特定于GCC的[最小/最大类型安全定义]的实现(http://lxr.free-electrons.com/source/include/linux/kernel.h#L622). (2认同)