C++和QT4.5 - 传递一个const int&overkill?通过引用传递有助于信号/插槽吗?

Ext*_*kun 8 c++ optimization const qt4 pass-by-reference

这里有两个问题......

我有许多功能,每帧多次调用实时视频处理应用程序.关于const的建议和通过引用传递,函数有一个像这样的签名

void processSomething(const int& value);
Run Code Online (Sandbox Code Playgroud)

当我继续输入一些额外的字符时,我想知道这是否有点过分.

第二个问题,关于QT的插槽/信号机制中的引用传递的主题,是否通过引用传递有助于防止在正常函数调用中复制对象?

Mar*_*n B 19

是的,这是过度的,实际上会导致代码比通过值传递int 更慢.int是四个字节; 引用(本质上是一个内存地址)也是四个字节(在32位机器上)或八个字节(在64位机器上).因此,您实际上可能需要将更多信息传递给函数 - 此外,您还需要解除引用该引用的开销.

但是,如果传递大于int的内容,则使用const引用会更有效,因为您只能传递四个或八个字节而不必复制整个对象.

关于Qt 编辑:是的,如果插槽对对象采用const引用,那么原因是为了节省复制对象的开销.


sha*_*oth 7

是的,通过引用传递有助于防止复制对象.但是编译器可能决定完全优化它并且如果它产生相同的效果则按值传递.如果函数和调用站点位于相同的转换单元中,但是某些编译器可以进行更多的全局优化,则通常可以进行这种优化 - 如果您愿意,可以检查发出的汇编.

这就是为什么你真的不应该通过引用传递原始类型,如果你关心性能,除非你真的有理由.请参阅将const引用传递给基本类型有什么用?讨论那个问题.