0

函数对象 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());
}
4

2 回答 2

2

是的,总是为临时变量调用构造函数。除非编译器绝对确定如果省略没有副作用,它不会优化它。

于 2011-07-14T18:06:32.873 回答
0

顺便说一句,以下代码:

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

return false;

可以简写为:

return (randomNumber -= e.weight) <= 0.0;
于 2011-07-14T18:34:59.140 回答