从 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,这是可以避免的有条件。
考虑这段代码:
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,这是可以避免的有条件。