初始化 QString 的最佳方式

Best way to initialize QString

我有一个 QString 变量作为 struct 成员。

用默认值初始化它的最佳方法是什么:

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

QStringLiteral 将具有最低的运行时开销。它是少数具有 O(1) 成本的文字 QString 初始化之一。 QLatin1String 会非常快,但字符串长度的成本为 O(N)。使用 C 字符串文字的初始化将具有最高的 O(N) 成本,相当于 IIRC QString::fromUtf8("…")。第二次和第三次初始化还 添加 O(N) 内存成本,因为创建了字符串副本(!)。无论您在可执行文件大小上“节省”多少,都会在程序启动时立即消失:(

通过 QStringLiteral 初始化获胜,尽管您可能希望利用现代 C++11 自定义文字来缩短它。抵制为它使用宏的冲动:这是一种极其误导的方法,因为你用一个短符号污染了全局命名空间。