Visual c++ visualc&x2B+;lambda始终输出调试信息 如果我在某个地方实例化lambda(编译器没有内联它),我可以找到一个字符串,显示lambda在我的C++代码中的位置:

Visual c++ visualc&x2B+;lambda始终输出调试信息 如果我在某个地方实例化lambda(编译器没有内联它),我可以找到一个字符串,显示lambda在我的C++代码中的位置:,visual-c++,Visual C++,?AV@?0??MyFunction@MyScopedClass@MyNamespace@@SAXXZ@ 我不希望这些信息出现在可执行文件中,因为它可能会泄露类和函数的重要名称 关闭所有类型的输出调试信息。如果我改为使用普通函数,那么最终的可执行文件没有这些信息,因此手动将所有lambda转换为普通函数将“修复它”。但最好的处理方法是什么?我们能告诉编译器将lambda转换成普通函数吗 更新:我用其他编译器进行了测试:g++和clang。它们都留下了相同的参考资料。我还发现了另一个关于这个问题的

<代码>?AV@?0??MyFunction@MyScopedClass@MyNamespace@@SAXXZ@

我不希望这些信息出现在可执行文件中,因为它可能会泄露类和函数的重要名称

关闭所有类型的输出调试信息。如果我改为使用普通函数,那么最终的可执行文件没有这些信息,因此手动将所有lambda转换为普通函数将“修复它”。但最好的处理方法是什么?我们能告诉编译器将lambda转换成普通函数吗

更新:我用其他编译器进行了测试:g++和clang。它们都留下了相同的参考资料。我还发现了另一个关于这个问题的未解之谜,请不要带着“你们为什么要关心一些符号呢?”

以下是一些可以测试的代码:

#包括
#包括
类MyUnscopedClass
{
公众:
MyUnscopedClass(常数std::函数和f):
f(f)
{
}
std::函数f;
};
名称空间MyNamespace
{
类MyScopedClass
{
公众:
静态void temp1(int x)
{

在注释中@dxiv的帮助下,我发现了有问题的设置

<> >代码>配置属性>通用> C++语言标准

不可能,因为某种原因

<> >代码>预览-最新C++工作草案(STD:C++最新) < /P>的特点 所以我把它设为第二个最近的

ISO C++17标准(std:C++17)

我得到了一个随机标识符

AV@@


我仍然好奇这个标识符是如何被选择的。< /P>什么版本的VC++?自动lambda名字是一个被损坏的GUID,因为至少VS.MyScver被定义为1927,VS 2019 16.7,但是它对我来说不是重复的。粘贴你的代码到默认向导生成的C++控制台应用程序中,发布模式exe只包含<代码> Av@ @/code>在x86和x64版本中都使用VS 16.7.5。这很奇怪。也许我在编译器设置中调整了一些设置错误?确实很奇怪。不确定这可能是什么设置。我发现很难相信这是出于任何原因的预期行为,所以我建议你在提交一份正式报告。我做了,让我们看看。