首页 > 解决方案 > 从 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在开头添加,以便在执行潜在危险代码之前条件短路?

标签: c++stlundefined-behavior

解决方案


根据这篇文章,是的,这将导致未定义的行为。

如果您希望避免未定义的行为,如果代码尝试执行标准未定义的操作,则会发生这种情况,那么是的,如果代码不执行,您将避免 UB,这可以通过条件来避免。


推荐阅读