c++ - 为什么局部变量和成员变量的默认捕获不一致?
问题描述
我很好奇与传递默认参数不一致的背后是什么故事:
struct Example {
void run() {
int localVar = 0;
auto l = [=](){
// localVar = 100; Not allowed (const copy of localVar)
memberVar = 100; // allowed (const copy of this pointer - NOT const *this copy)
};
l();
}
int memberVar = 1;
};
为什么不通过 const 值(包括 const *this)将所有参数传递给 lambda 捕获?
这是一个理想的设计选择,还是实施限制的结果?
编辑:
我知道指向对象的 const 指针作为参数传递,对象本身可以修改,但指针本身不能。但这是读者必须知道的实现细节,乍一看并不明显。从我的主观角度来看,将通过 const 值捕获 *this ......
解决方案
为什么局部变量和成员变量的默认捕获不一致?
因为默认捕获根本不捕获成员变量。捕获的是this
指针。那就是“const”:你不能修改this
. 但是在非常量成员函数中,它是指向非常量的指针,因此您可以修改非常量成员。
推荐阅读
- javascript - 从 NodeJS 的每个输出中替换 Unicode - 代码优化
- c - Fgets 只读取文件的 2 行
- python - 为什么使用按钮运行脚本时会打开引号>提示
- html - 可滚动组件内的工具提示
- java - 如何将 hashmap 从 spring-boot 后端传递到 UI?
- javascript - HTML-JavaScript-Nested_Loop
- blockchain - 在哪里可以找到远程 EOS API
- ssis - 什么是“约束或表达式”与“约束和表达式”、“与”与“或”?
- go - 如何将地图 [] 保存为与 GORM 的关系?
- python - 如何用矩阵位置标记图像上的数字?(按数字涂色)