什么是在函数调用中发送QStrings的最佳方法?

问题描述 投票:20回答:3

我想知道在QT中将Qstring作为参数发送到函数的最有效和最实用的方法是什么,更具体地说。我想用一个参考。问题是我也想在函数本身中实例化该字符串,例如:

这是函数原型:

void myFunction(QString & theMsg);

这是函数调用:

myFunction(tr("Hello StringWorld"));

现在function tr()返回一个QString,但它不能用于引用(我可以看到原因)。

我必须这样做:

QString theQstr("Hello StringWorld"); 
myFunction(theQstr);

有没有一种更简单的方法在仍然使用引用时执行此操作,或者我可以只更改函数参数以使用QString并且它仍然有效吗?

string qt pointers pass-by-reference
3个回答
14
投票

QString在幕后使用COW(Copy On Write),因此即使您使用如下签名,也不会复制实际的字符串:

void myFunction(QString theMsg)

(直到你修改它为止)。

如果您绝对需要引用,我将使用const&除非您计划修改输入参数。

void myFunction(QString const&theMsg)


9
投票

最有效和最实用的方法是使用const引用。 QString COW将比通过引用传递慢,但比常规副本更快。


1
投票

当你传递一个QString时,调用站点必须调用QString copy ctor然后调用dtor:两者都意味着一个原子引用计数操作(不可忽略),以及一些更多生成的汇编代码。因此代码越来越慢(我在这里没有提到不太常见的std :: move场景)。

另一方面,当你传递一个const QString&时,在被调用的站点上,有一个双重间接来访问字符:指向指针的指针。因此,这比传递QString要慢,特别是如果使用了很多QString参数。

我建议总是传递一个const QString&,如果你需要在被调用端获得最大速度,那么在那里制作一个QString副本,并访问这个本地副本以避免双间接(更快,生成更少的代码)。

© www.soinside.com 2019 - 2024. All rights reserved.