初始化QString的最佳方法

时间:2018-11-13 11:57:01

标签: c++ string qt qstring

我有一个QString变量作为struct成员。用默认值初始化它的最佳方法是什么?

struct Foo
{
   QString name = "name";
   // or
   // QString name = QStringLiteral("name");
   // or
   // QString name = QLatin1String("name");
   // or something else...
}

1 个答案:

答案 0 :(得分:3)

QStringLiteral将具有最低的运行时开销。它是使用O(1)花费的少数文字QString初始化之一。 QLatin1String会非常快,但是字符串的长度为O(N)。用C字符串文字进行的初始化将具有最高的O(N)成本,并且等效于IIRC QString::fromUtf8("…")。第2次和第3次初始化还会增加 O(N)的内存成本,因为会复制字符串(!)。无论您在可执行文件大小上进行的任何“节省”,都随着程序启动迅速消失:(

通过QStringLiteral进行初始化很成功,尽管您可能希望利用现代C ++ 11自定义文字来使其更短。抵制使用宏的冲动:当您使用短符号污染全局名称空间时,这将是一种极度误导的方法。