Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ for循环中的临时函数对象_C++_Function Object - Fatal编程技术网

C++ for循环中的临时函数对象

C++ for循环中的临时函数对象,c++,function-object,C++,Function Object,函数对象randomElementByWeight构造函数是否会在循环中的每次迭代中被调用,或者编译器是否会以某种方式对此进行优化?我想确保每次迭代都调用rand函数,并且我认为最好在函数对象构造函数中使用它 struct randomElementByWeight { double randomNumber; randomElementByWeight() : randomNumber(rand() / static_cast<double>(RAND_MAX))

函数对象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());
}
struct randomElementByWeight
{
双随机数;
randomElementByWeight():随机数(rand()/static_cast(rand_MAX)){
布尔运算符()(常量元素&e)
{

如果((randomNumber-=e.weight)是,则总是为临时变量调用构造函数。除非编译器完全确定如果使用它不会产生任何副作用,否则它不会对其进行优化。

只是一个旁注,下面的代码:

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

return false;

如果((randomNumber-=e.weight)我在执行该警告时收到警告MS VS2008 C4800:“double”:强制值bool'true'或'false'(性能警告)@ephi:不可能,
是的。我一定错过了什么。我再试了一次,没问题
return (randomNumber -= e.weight) <= 0.0;