c++ - 从 lambda 中的空指针调用方法
问题描述
考虑这段代码:
struct A {
bool f() { return true; }
};
// ...
std::vector<A*> v = {new A(), nullptr, new A()};
std::find_if(v.begin(), v.end(), [](const A* object) { return object->f(); });
如果我们从对象调用方法nullptr
,这是未定义的行为吗?如果是并且我想解决此问题,是否可以A != nullptr
在开头添加,以便在执行潜在危险代码之前条件短路?
解决方案
根据这篇文章,是的,这将导致未定义的行为。
如果您希望避免未定义的行为,如果代码尝试执行标准未定义的操作,则会发生这种情况,那么是的,如果代码不执行,您将避免 UB,这可以通过条件来避免。
推荐阅读
- mdx - 如何从 MDX 中的日期级别提取月、年和日期
- mysql - 连接三个联结表
- qt - ALSA 的 .asoundrc 的默认值是什么?
- python - ModuleNotFoundError:没有名为“torch.nn”的模块;“火炬”不是 Mac OS 上的软件包
- json - 在 Powershell 中使用 Json 变量
- java - 使用 JPA 导致无限循环的 OneToMany 关系
- mysql - 与多个表有多对多关系 1-> 2.1, 2.2, 2.3
- authentication - 服务器端 Blazor:刷新页面后如何保持用户身份验证?
- swift - 动态设置颜色collectionview标签背景颜色
- windows - 你如何在 Windows 上构建 TextMate?