假设我有以下代码片段:
// global variable
std::thread worker_thread;
// Template function
template <typename Functor>
void start_work(Functor &worker_fn) // lambda passed by ref
{
worker_thread = std::thread([&](){
worker_fn();
});
}
这被称为:
void do_work(int value)
{
printf("Hello from worker\r\n");
}
int main()
{
// This lambda is a temporary variable...
start_work([do_work](int value){ do_work(value) });
}
我开始在MSVC2012上进行开发。这一切都编译得很好,似乎也能正常工作。但是当我转到Linux平台上的gcc编译器时,我得到了以下(缩写)错误:
no known conversion for argument 1 '...__lambda3' to '...__lambda3&'
我的问题:
- 所以,从错误信息来看,我认为lambda表达式是一个临时变量,因此无法通过引用传递 - 是这样吗?
- 另外,有什么想法可以解释为什么这会在MSVC上工作吗?它是否自动修复了我的代码?
const
引用会修复gcc编译。 - Bathsheba