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

yan*_*nce 23 string qt pointers pass-by-reference

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

这是函数原型:

void myFunction(QString & theMsg);
Run Code Online (Sandbox Code Playgroud)

这是函数调用:

myFunction(tr("Hello StringWorld"));
Run Code Online (Sandbox Code Playgroud)

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

我必须这样做:

QString theQstr("Hello StringWorld"); 
myFunction(theQstr);
Run Code Online (Sandbox Code Playgroud)

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

Mor*_*tad 15

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

void myFunction(QString theMsg)

(直到你修改它为止).

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

void myFunction(QString const&theMsg)

  • 如果你查看Qt源代码,你会发现Qt本身倾向于将Qt类型作为const T&传递给函数.即使他们使用COW,复制类的开销仍然比传递引用要多一些. (15认同)
  • 写对象的副本仍然必须维护指向数据的指针和引用计数(原子增量/减量),并通过复制构造函数和析构函数运行.因此,即使它的效率相当高,只需通过参考就可以更有效率.如果编译器知道它不必对param做任何事情,它也可能使某些内联函数成本为零. (5认同)

rpg*_*rpg 10

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

  • 为什么?[更多字符使评论有效] (2认同)