初始化 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 自定义文字来缩短它。抵制为它使用宏的冲动:这是一种极其误导的方法,因为你用一个短符号污染了全局命名空间。
我有一个 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 自定义文字来缩短它。抵制为它使用宏的冲动:这是一种极其误导的方法,因为你用一个短符号污染了全局命名空间。