for循环中的临时函数对象

时间:2011-07-14 18:03:49

标签: c++ function-object

函数对象randomElementByWeight构造函数是否通过循环每次迭代都被调用,或者编译器能以某种方式优化它吗?我想确保为每次迭代调用rand函数,我认为将它放在函数对象构造函数中会更好。

struct randomElementByWeight
{
    double randomNumber;

    randomElementByWeight() : randomNumber(rand() / static_cast<double>(RAND_MAX)) {}

    bool operator()(const Element& e)
    {
        if ( (randomNumber -= e.weight) <= 0.0 )
        {
            return true;
        }

        return false;
    }
};

...

for (int i = 0; i < 3; ++i)
{
    iter = find_if(routes.begin(), routes.end(), randomElementByWeight());
}

2 个答案:

答案 0 :(得分:2)

是的,始终为构造函数调用临时变量。除非编译器完全确定没有副作用(如果省略),否则不会对其进行优化。

答案 1 :(得分:0)

只是旁注,以下代码:

if ( (randomNumber -= e.weight) <= 0.0 )
{
    return true;
}

return false;

可以缩写为:

return (randomNumber -= e.weight) <= 0.0;