【发布时间】:2020-06-17 14:28:48
【问题描述】:
我有以下代码:
#include <iostream>
class Bobo
{public:
int member;
void function()
{
auto lambda = [this]() { std::cout << member << '\n'; };
auto lambda2 = [this]() { std::cout << typeid(*this).name() << '\n'; };
lambda();
lambda2();
}
};
int main()
{
Bobo bobo;
bobo.function();
}
行 std::cout
class <lambda_49422032c40f80b55ca1d0ebc98f567f>
但是,如何访问已捕获的“this”指针,以便 typeid 运算符可以返回类型类 Bobo?
编辑:我得到的结果是在 Visual Studio Community 2019 中编译此代码。
【问题讨论】:
-
这对我来说根本不是“可以理解的”。这肯定是个bug。
this的所有用法都应该引用捕获,而不是编译器生成的 lambda 类,它对用户来说是不存在的。我无法使用g++9 进行复制(没有选项)。它打印4Bobo,就像@songyuanyao 的测试一样。 -
@songyuanyao 我在 Windows 上使用 Visual Studio Community 2019 编译。我再次检查,这就是我得到的结果。通过创建一个局部临时变量并捕获它,我得到了我想要的行为。不过,这不应该发生吗?
-
不,这是错误的。请提交一个针对 VS 的错误 :-)
标签: c++ visual-studio visual-c++ lambda capture