c++ - 对 lambda 的 const 引用导致使用后范围?
问题描述
MSVC Asan 报告了一个我无法理解的 use-after-scope 错误。
示例代码归结为
int main() {
std::list<std::string> listOfStr;
const auto& pred = [](const std::string& str) { return true; };
const auto result = std::find_if(listOfStr.cbegin(), listOfStr.cend(), pred);
return 0;
}
使用带有以下选项的 MSVC 2019 编译器进行编译:
cl main.cpp /fsanitize=address /Zi /std:c++17
我不会在这里复制完整的错误文本,但我发现 asanstd::find_if
在到达find_if
' 实现的第一行之前会随时发出警报。
如果我们删除调试信息 ( /Zi
) 或切换到 c++17 之前的标准 (remove /std:c++17
),错误就消失了。
什么原因?它是 asan 中的错误,还是 c++17 中的引用有一些新内容?
解决方案
推荐阅读
- project-reactor - Project Reactor 的 Flux 能否一一处理消息
- java - WAR 文件在不同机器上编译时不起作用
- javascript - 在 Cytoscape.js 中使节点内的图像可点击
- ios - Swift Uiview 背景动画不起作用
- java - 无法为最终变量“weekTotalDaylyMinutes”赋值
- mysql - 在多台服务器上使用 mysql-server docker 容器创建 MySQL 集群
- c++ - 如果带有函数指针模板参数,则 constexpr 的虚假警告
- excel - 在 Excel VBA 中执行 GAMS
- shell - Crontab 不执行脚本,而是手动执行。macOS X
- c# - Xamarin Android 活动/片段没有被垃圾收集