但在调用的过程中却输入了base::PlannerDataVertex(motion->state),这一点是我不能理解的。
下图是关于PlannerDataVertex类的一些信息。
下图是关于Motion类的一些信息。
我的问题就是为什么data.addStartVertex在调用过程中与 Planner::getPlannerData的调用方式不一样,我能理解Planner::getPlannerData的调用方式,但是理解不了data.addStartVertex调用的逻辑关系。
问题清晰明了,你适合做程序猿。。。。哈哈。。。
首先,你getPlannerData 的形参是什么?是 PlannerDataVertex 类型的对象的引用。。。也就是说,它的实参应该是 PlannerDataVertex 类型的对象,这个你明白吧?
其次,base::PlannerDataVertex(motion->state) 这句话是干嘛的?这不就是构造函数吗?参数是 state,还有个默认参数,那你说,构造函数创建的是什么?对象。。。
ok。。。。
一个创建了对象,一个把这个对象作为实参传递了。。。
相信你理解了
base::PlannerDataVertex(motion->state)
创建了一个零时对象,调用data.addStartVertex()
时,形参的引用绑定到这个零时对象,这个临时对象的生命期就延长至这个引用的生命期。这个过程在C++里叫着Temporary materialization
https://en.cppreference.com/w/cpp/language/implicit_conversion#Temporary_materialization