我们说我有一段这样的代码:
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
是否被执行了两次?
答案 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 的双重计算。 ž