【发布时间】:2022-07-23 01:16:50
【问题描述】:
代码:
#include <iostream>
template <class FunctorType>
void caller(const FunctorType& func) {
func();
}
int main() {
double data[5] = {5., 0., 0., 0., 0.};
auto peek_data = [data]() { std::cout << data[0] << std::endl; };
auto change_data = [data]() mutable { data[0] = 4.2; };
caller(peek_data); // This works
caller(change_data); // This doesn't
return 0;
}
如果我用clang++ -std=c++11 mutable_lambda.cpp 编译它,我得到了
error: no matching function for call to object of type 'const (lambda at mutable_lambda.cpp:8:22)'.
问题: 为什么传递第二个 lambda 表达式可变复制捕获编译失败?提前致谢!
【问题讨论】:
-
如果你记得 lambda 只是一个匿名类的实例,它有一个
()运算符,默认是一个const和一个可变的一个是非-const一个。现在看看你的模板参数声明为什么,看看这个史酷比之谜现在是否可以解决。
标签: c++ templates lambda capture