C++标准是否保证调用:
c = std::min(f(x), g(x));
函数f和g只被评估一次吗?
是的。因为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)
gcc
通常从右到左评估参数。 - Matthieu M.