从 lambda 中的空指针调用方法

Invoking a method from null pointer in the 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,以便在执行潜在危险代码之前条件短路?

根据 this post,是的,这会导致未定义的行为。

如果你想避免未定义的行为,如果代码试图做一些标准没有定义的事情,那么是的,如果代码不执行,你将避免 UB,这是可以避免的有条件。