如何解决C++ lambda 按值语义捕获?
class TestGetStr {
public:
string a;
string getString() {
return a;
}
};
void acceptConstString(const string & a) {
std::cout << a << std::endl;
}
int main(int argc,const char * argv[]) {
auto testGetStr = TestGetstr();
acceptConstString(testGetStr.getString()); //compile ok
auto testaaa = [testGetStr](){
//compile error 'this' argument to member function 'getString' has type 'const TestGetStr',but function is not marked const
acceptConstString(testGetStr.getString());
};
普通调用和 lambda 捕获的区别?
为什么?感谢您提供更多详细信息。
解决方法
您可以添加 mutable
限定符。
auto testaaa = [testGetStr]() mutable {
// ^^^^^^^
acceptConstString(testGetStr.getString());
};
否则 lambda 的 operator()
是 const 限定的,然后无法在捕获的对象上调用非常量成员函数。
- mutable:允许body修改复制捕获的对象,并调用它们的非常量成员函数
除非在 lambda 表达式中使用关键字 mutable
,否则
函数调用运算符是 const 限定的,并且对象是
复制捕获的内容不可从该 operator()
内部修改。
PS:或者更好地制作 TestGetStr::getString()
const 成员函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。