C++ 错误:初始化类型为';的非常量引用无效;std::函数<;void()>&';从类型为';main():<;lambda()>'|
编辑:对不起,我问这个问题时根本不了解参考资料 当我运行此代码时,似乎遇到了此错误 错误:从'main():'类型的右值初始化'std::function&'类型的非常量引用无效。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() ;
#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);
}