std :: min()参数中的计算是否会产生计算开销?

时间:2016-12-13 18:01:10

标签: c++ c++11 std min

我们说我有一段这样的代码:

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

查看std::min (here)的文档,我想知道函数的第一个参数中的加法是否会产生计算开销,即y+1是否可能执行两次。< / p>

我的问题的原因是文档将此显示为std::min

的可能实现
template<class T> 
const T& min(const T& a, const T& b)
{
    return (b < a) ? b : a;
}

所有人都知道,y+1是否被执行了两次?

1 个答案:

答案 0 :(得分:2)

template<class T> 
const T& min(const T& a, const T& b)
{
    return (b < a) ? b : a;
}

很容易看出,在可能的实现中, min 函数的每个参数只计算一次。

在您的特定情况下,临时 y + 1 绑定到 const引用 a 并且 z 被绑定到 const引用 b 。然后 a b 用于执行计算。

从另一方面来说,宏在这个意义上更危险。

MIN 宏的典型实现:

#define MIN(a, b) ((a) < (b)) ? (a) : (b)

MIN(y + 1, z)

被预处理到:

((y + 1) < (z)) ? (y + 1) : (z)
如果 y + 1&lt;

,则

导致 y + 1 的双重计算。 ž