我有一个QString
变量作为struct
成员。用默认值初始化它的最佳方法是什么?
struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}
答案 0 :(得分:3)
QStringLiteral
将具有最低的运行时开销。它是使用O(1)花费的少数文字QString
初始化之一。 QLatin1String
会非常快,但是字符串的长度为O(N)。用C字符串文字进行的初始化将具有最高的O(N)成本,并且等效于IIRC QString::fromUtf8("…")
。第2次和第3次初始化还会增加 O(N)的内存成本,因为会复制字符串(!)。无论您在可执行文件大小上进行的任何“节省”,都随着程序启动迅速消失:(
通过QStringLiteral
进行初始化很成功,尽管您可能希望利用现代C ++ 11自定义文字来使其更短。抵制使用宏的冲动:当您使用短符号污染全局名称空间时,这将是一种极度误导的方法。