繁体   English   中英

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

[英]C++ and QT4.5 - is passing a const int& overkill? Does pass by reference helps in signals/slots?

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

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

void processSomething(const int& value);

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

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

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

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

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

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

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

首先 - 两者之间的区别

  • void processSomething(const int&value);
  • void processSomething(int value);

是:通常通过传递指针传递一个const引用,另一个通过复制传递。 在呼叫之后(来自呼叫方),结果是相等的。 无论你传递给函数的是什么都不会被调用改变。

在函数内部,您也不会看到任何差异(至少在int上)。 在对象上,您当然只能使用const函数。

在性能方面 - 将const引用传递给int可能(或可能不)更慢,具体取决于编译器和优化。 编译器可以(理论上)优化const参考的传递到值传递,我不知道它是否确实如此。 当然,使用指向int而不是值的指针会更慢。

有关详细信息,请参阅: 何时使用指针以及何时不使用指针


阅读其他链接后的帖子 - 编译器无法在多线程环境中对其进行优化。 至少在MT环境中,const int&和int调用之间存在真正的差异。 该链接为+1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM