情况1
int main() {
int x = 100;
auto lamb_var = [y = x](){
int y = 10;
return y + 1;
};
assert (lamb_var() == 11);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在https://godbolt.org/z/hPPParjnz
MSVC 和 GCC 都接受隐藏 init-capture,而 Clang 则指责复合语句上的 y 重新定义并引发编译器错误。
但是,如果我们删除 init-capture 并进行 simple-capture,则所有编译器都接受 Shadowing:
案例2
int main() {
int x = 100;
auto lamb_var = [x](){
int x = 10;
return x + 1;
};
assert (lamb_var() == 11);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在https://godbolt.org/z/Gs4cadf5e
简单捕获(情况 2)会导致在 …