Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++ 错误:初始化类型为';的非常量引用无效;std::函数<;void()>&';从类型为';main():<;lambda()>'|_C++_Rvalue_Lvalue_Lvalue To Rvalue - Fatal编程技术网

C++ 错误:初始化类型为';的非常量引用无效;std::函数<;void()>&';从类型为';main():<;lambda()>'|

C++ 错误:初始化类型为';的非常量引用无效;std::函数<;void()>&';从类型为';main():<;lambda()>'|,c++,rvalue,lvalue,lvalue-to-rvalue,C++,Rvalue,Lvalue,Lvalue To Rvalue,编辑:对不起,我问这个问题时根本不了解参考资料 当我运行此代码时,似乎遇到了此错误 错误:从'main():'类型的右值初始化'std::function&'类型的非常量引用无效。 #include <bits/stdc++.h> using namespace std ; void printfunction(bool a, function <void()> &b) { if (a == true) { b() ;

编辑:对不起,我问这个问题时根本不了解参考资料

当我运行此代码时,似乎遇到了此错误

错误:从'main():'类型的右值初始化'std::function&'类型的非常量引用无效。

#include <bits/stdc++.h>
using namespace std ;

void printfunction(bool a, function <void()> &b) 
{ 
    if (a == true) 
    {
        b() ; 
    }
} 

int main() 
{
    int value = 45 ;    

    printfunction(true, [value](){cout << "The value is : " << value ;}) ; 
}
问题是,如果需要,我想更改函数引用中的函数。。。 还有别的办法吗?请让我知道它是否确实存在

再见


Samuel

printfunction
调用中,必须首先将lambda表达式
[value](){…}
参数转换为临时
函数
对象

对非常量
函数&
的引用仅绑定到l值,而不是临时值(r值)


另一方面,对const的引用可以绑定到临时变量。这就是您观察到的。

如果要修改
std::function
,则需要传递一个可修改(左值)参数:

int main()
{
    int value = 45;

    std::function f = [value](){ std::cout << "The value is : " << value ;};

    printfunction(true, f);
}
intmain()
{
int值=45;

std::函数f=[值](){std::cout C syntax error,C tag removed为什么不按值获取函数?这里有些不合理。如果更改函数,由于调用方创建了临时函数,这些更改将丢失。因此,如果要在
printfunction
中更改函数,则调用它是错误的。是否要
print函数
获取函数的私有副本,然后在不影响其调用者的情况下对其进行修改?
int main()
{
    int value = 45;

    std::function f = [value](){ std::cout << "The value is : " << value ;};

    printfunction(true, f);
}