gpt4 book ai didi

c++ - 在函数中传递参数 - OpenCV & Cpp

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:18 25 4
gpt4 key购买 nike

我已经为这个问题反复思考了一段时间,尤其是自从我开始使用 OpenCV 库以来。事实上,在 OpenCV 中,使用了几种方法:

  • 第一个:funcA((const) CvMat arg)
  • 第二:funcA((const) CvMat& arg)
  • 第三:funcA((const) CvMat* arg)
  • 4th: funcA((const) CvMat*& arg) => 我刚刚看到,目前一直停留在这个地方

当然,对应于每个方法,调用者格式和函数实现应该是不同的。

所有这些衍生品有什么意义??特别是最后一个(我还没有弄明白它的用法)

最佳答案

暂时忽略 (const),为清楚起见,使用 int:

按值传递在函数体中复制

void funcA(int arg) {
// arg here is a copy
// anything I do to arg has no effect on caller side.
arg++; // only has effect locally
}

请注意,它在语义上制作了一个拷贝,但允许编译器在某些条件下省略拷贝。查找copy elision

通过引用传递。我可以修改调用者传递的参数。

void funcA(int& arg) {
// arg here is a reference
// anything I do to arg is seen on caller side.
arg++;
}

按值传递指针。我得到了指针的拷贝,但它指向调用者参数指向的同一个对象

void funcA(int* arg) {
// changes to arg do not affect caller's argument
// BUT I can change the object pointed to
(*arg)++; // pointer unchanged, pointee changed. Caller sees it.
}

传递对指针的引用。我可以更改指针本身,调用者将看到更改。

void funcA(int*& arg) {
// changes to arg affect caller's argument
// AND I can change the object pointed to.
(*arg)++; // pointee changed
arg++; // pointer changed. Caller sees it.
}

如您所见,后两个与前两个相同,只是它们处理指针。如果您了解指针的作用,那么在概念上就没有区别。

关于const,它指定参数是否可以修改,或者,如果参数是引用或指针,它们指向/引用的内容是否可以修改。 const 的定位在这里很重要。参见 const correctness例如。

关于c++ - 在函数中传递参数 - OpenCV & Cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12154296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com