初始化 QString 的最佳方式

Vad*_*kiv 6 c++ string qstring qt

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

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

struct Foo
{
   QString name = "name";
   // or
   // QString name = QStringLiteral("name");
   // or
   // QString name = QLatin1String("name");
   // or something else...
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 5

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

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