Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在函数中使用与输入/输出相同的变量_C++_Qt_Opencv - Fatal编程技术网

C++ 在函数中使用与输入/输出相同的变量

C++ 在函数中使用与输入/输出相同的变量,c++,qt,opencv,C++,Qt,Opencv,我正在编写一个QtGUI程序,与OpenCV一起创建一个人员跟踪应用程序。OpenCV有许多将矩阵作为输入和输出的函数,例如颜色转换函数: cvtColor(输入阵列src,输出阵列dst,整数代码,整数dstCn=0) Mat是OpenCV的默认矩阵类,假设我有一个名为frame的Mat对象,我将实现如下函数来更改其属性: CVT颜色(帧,帧,CV_RGB2HSV,0) 在任何函数上使用与输入和输出相同的变量有什么缺点吗?或者我应该先创建一个副本 或者我应该查看每个函数文档吗?我认为这是个人的

我正在编写一个QtGUI程序,与OpenCV一起创建一个人员跟踪应用程序。OpenCV有许多将矩阵作为输入和输出的函数,例如颜色转换函数:

cvtColor(输入阵列src,输出阵列dst,整数代码,整数dstCn=0)

Mat是OpenCV的默认矩阵类,假设我有一个名为frame的Mat对象,我将实现如下函数来更改其属性:

CVT颜色(帧,帧,CV_RGB2HSV,0)

在任何函数上使用与输入和输出相同的变量有什么缺点吗?或者我应该先创建一个副本

或者我应该查看每个函数文档吗?

我认为这是个人的选择。以下是一些个人样本:

获取只读输入,即对输出的引用,并在处理输入后将其推送到输出。可选错误结果友好

bool function(const type& input, type& output){
    output = input;
    return true;
}
获取只读输入,将其分配给输出,更改输出并返回它(C++11移动优化)

在这里,您强制对象的一个新副本作为参数,您可以使用它并返回它(当您不想更改副本时,最好使用C++11)

  • 输入和输出在同一个参数中。小心使用。可以返回错误

    布尔函数(类型和输入){ 返回true; }

  • 这取决于您的设计。不需要错误吗?。。。使用可移动的。需要错误吗?。。。使用一个可以让您访问返回值的函数。或者,只需遵循现有做法,但要知道每种做法如何帮助或惩罚您的表现,如:

    // this makes a pointless copy for the input (use const ref here)
    bool function(type input, type& output){
        output = input;
        return true;
    }
    
    (正确的道路是)


    <强> ps <强>:自学C++的DEV:(P/>P>)这是个人的选择。如果您以后不需要输入图像,请务必这样做。 实际上我已经试过了,大多数时候都有效,但有些时候效果很差。


    这取决于您正在使用的函数。

    可能的dup:在一般情况下,您几乎肯定要查看文档,甚至可能还要查看相关函数的源代码,以确定此类事情是否安全。但是在这个特定的例子中,你不能。谢谢,这只是一个例子,在这个例子中不起作用,但是我用这个方法实现了其他函数,它们似乎工作正常,所以我想你是对的。事实上,我刚刚发现了一个部分,我在cvtColor函数上传递了相同的变量,它工作得很完美,所以我想这是可能的。该变量是类的私有成员。
    type function(type input){
        // modify input
        return input;
    }
    type output = function(input);
    
    // this makes a pointless copy for the input (use const ref here)
    bool function(type input, type& output){
        output = input;
        return true;
    }
    
    bool function(const type& input, type& output){
        output = input;
        return true;
    }