0

刚刚学习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);

如果您想知道,尽管我认为这无关紧要,Thing 是来自 opencv 的 Mat。然而,这个问题是关于为什么上述方法以一种方式起作用而不是另一种。

有趣的是,将方法传递给整个对象,还是传递该对象的属性,哪个性能更高?表明两者都应该起作用,或者至少是可以接受的。不过,我肯定做错了什么,这可能归因于我不知道的 openCV 中的某些内容。

编辑:我有效地对 .property 值进行了一些图像处理。喜欢

process (Mat &src, Mat &out){
...
pyrDown(src, result, Size(src.cols / 2, src.rows / 2));
...

当它不工作时,我没有看到 pyrDown 生效。

4

1 回答 1

1

这可能是由于对象切片(我不熟悉 openCV)。在第一个示例中:

ChildObject in = myObject.getObjFromVector(0); 

getObjFromVector()由as inis 类型的返回值引用的对象制作副本ChildObject,not ChildObject&

第二个示例将返回的引用直接传递给函数,因此不会发生对象切片。

于 2012-07-25T15:47:33.533 回答