刚刚学习C ++,遇到了一个问题,我不确定为什么会出现以下情况。
不起作用
ChildObject in = myObject.getObjFromVector(0);
ChildObject out = myObject.getObjFromVector(1);
doSomething(in.property, out.property); // void doSomething(Thing &in, Thing &out)
where
ChildObject& getObjFromVector(int index)
作品
process(myObject.getObjFromVector(0).property, myObject.getObjFromVector(1).property);
如果你想知道,虽然我认为它不相关,但事情是来自opencv。然而,这个问题是为什么上述工作以一种方式而不是另一种方式工作。
有趣的是Which is more performant, passing a method the entire object, or a property of that object?表明两者都应该起作用,或者至少是可以接受的。我肯定做错了,这可能是openCV中我不知道的事情。
编辑: 我正在有效地对.property值进行一些图像处理。喜欢
process (Mat &src, Mat &out){
...
pyrDown(src, result, Size(src.cols / 2, src.rows / 2));
...
当它不工作时,我没有看到pyrDown生效。
答案 0 :(得分:1)
这可能是由于object slicing(我不熟悉openCV)。在第一个例子中:
ChildObject in = myObject.getObjFromVector(0);
副本由getObjFromVector()
的返回值引用的对象构成,in
的类型为ChildObject
,而不是ChildObject&
。
第二个示例将直接返回的引用传递给函数,因此不会发生对象切片。