gpt4 book ai didi

c++ - 无法将 lambda 表达式作为引用传递

转载 作者:行者123 更新时间:2023-11-28 06:43:28 25 4
gpt4 key购买 nike

我有这个代码示例:

#include <iostream>

void
foo( int & value )
{
value += 5;
}

template< class T >
void
foo( T value )
{
value();
}

template < class T >
void bar( T & val )
{
foo( val );
}

int main()
{

int i = 0;
bar( i );
std::cout << i << std::endl;
// prints: 5

bar( [](){ std::cout << "ok1" << std::endl; } );
// prints: ok1

[]()
{
bar(
[](){ std::cout << "ok2" << std::endl; } );
}();
// error:
/*
test.cpp(36) : error C2664: 'void bar<void(__cdecl *)(void)>(T &)' : cannot conv
ert argument 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *&)(void)'
with
[
T=void (__cdecl *)(void)
]

*/

}

有人可以解释为什么第一次(“ok1”)lambda 转换成功,但在嵌套(“ok2”)的情况下它“无法转换”吗?

附言ofc 当我在该模板函数中使用“通用引用”参数时效果很好,但我很感兴趣理解。

最佳答案

这行得通。对你有帮助吗?

auto l = [](){ std::cout << "ok2" << std::endl; };
[&l]()
{
bar(l);
}();

关于c++ - 无法将 lambda 表达式作为引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com