C++ Opencv源代码中的注释是否错误?
当我阅读OpenCV中函数C++ Opencv源代码中的注释是否错误?,c++,opencv,C++,Opencv,当我阅读OpenCV中函数imread()的源代码时,我发现在返回行前面有一条注释:///返回对数据的引用 我认为这个评论是错误的?因为img这里有一个局部变量,它在函数调用之后过期,所以我们不能返回它的引用。另外:定义的返回值是 Mat < /Cl>不 MAT和(我是C++初学者,也许这个问题有点愚蠢?这个函数位于代码> opencv/MullGC/CODES/SRC/LooSuf.CPP ) 看来这可能是拙劣的措辞。你是对的,这不是C++引用,而且对象肯定会被值复制。 但我认为该评论的作者可
imread()
的源代码时,我发现在返回行前面有一条注释:///返回对数据的引用我认为这个评论是错误的?因为
img
这里有一个局部变量,它在函数调用之后过期,所以我们不能返回它的引用。另外:定义的返回值是<代码> Mat < /Cl>不<代码> MAT和<代码>(我是C++初学者,也许这个问题有点愚蠢?这个函数位于代码> opencv/MullGC/CODES/SRC/LooSuf.CPP )
看来这可能是拙劣的措辞。你是对的,这不是C++引用,而且对象肯定会被值复制。 但我认为该评论的作者可能提到了数据本身,它是在
Mat
中处理的。但从这几行代码来看,这并不完全明显
它仍然是拙劣的措辞,并导致这种混乱。什么是class
Mat
的声明?它是否可能通过包含对分配了较长生存期的数据的引用/句柄而充当引用/句柄语义类型?那么注释就正确了(在非文字意义上)。这只是一个口语--img
引用了底层图像数据。这就是你用它的目的。哦,天哪!那听起来很合理!谢谢(真是个愚蠢的问题)————————————————————————————————一点都不愚蠢。它表明你理解你正在阅读的内容,并且问题和解释一样合理。
Mat imread( const String& filename, int flags )
{
CV_TRACE_FUNCTION();
/// create the basic container
Mat img;
/// load the data
imread_( filename, flags, img );
/// optionally rotate the data if EXIF' orientation flag says so
if( !img.empty() && (flags & IMREAD_IGNORE_ORIENTATION) == 0 && flags != IMREAD_UNCHANGED )
{
ApplyExifOrientation(filename, img);
}
/// return a reference to the data
return img;
}