如何解决从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,这可以通过使用a来避免条件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。