void foo() {
ImageType img = getCustomImage();
}
ImageType getCustomImage() {
ImageType custom_img;
//lots of code
return custom_img;
}
据我所知,代码行
ImageType img = getCustomImage();
将会调用一个复制构造函数来使用 custom_img
函数的返回值作为它的参数。维基百科称,有些编译器甚至会再次执行这个操作,对于一个初始的临时变量!
我的问题是:通常情况下,通过引用传递而不是返回值来绕过这个开销(图像的复制构造函数很昂贵)是否更快呢...
void foo() {
ImageType img;
getCustomImage(img);
}
void getCustomImage(ImageType &img) {
//code operating directly on img
}
有人告诉我,如果编译器支持返回值优化,则不应该有任何区别。这是真的吗?现在,在合理范围内,我可以假设这一点吗?当速度很重要时,我该如何构建我的程序结构?
getCustomImage
函数签名中使用引用传递的语法,这只适用于C++。 - VickyImageType
构造函数,即使没有返回值优化,这两种形式可能更或少等效。这就是为什么“哪个更快”的唯一正确答案是“分析”。如果您不能在所有平台上都进行,则选择您喜欢的...主要问题可能是普遍适用的。 - Dennis Zickefoose