Лучший способ инициализировать QString - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть переменная QString в качестве члена struct. Как лучше всего инициализировать его значением по умолчанию:

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

1 Ответ

0 голосов
/ 13 ноября 2018

QStringLiteral будет иметь самые низкие издержки времени выполнения.Это одна из немногих буквальных QString инициализаций со стоимостью O (1).QLatin1String будет довольно быстрым, но будет иметь длину O (N) в длине строки.Инициализация с строковым литералом C будет иметь наибольшую стоимость O (N) и эквивалентна IIRC QString::fromUtf8("…").2-я и 3-я инициализация также добавляет O (N) стоимости памяти, поскольку создается копия строки (!).Любая «экономия», которую вы сделали в размере исполняемого файла, таким образом, быстро исчезает при запуске программы: (

Инициализация с помощью QStringLiteral выигрывает, хотя вы можете использовать современные пользовательские литералы C ++ 11, чтобы сделать его короче.Не поддавайтесь желанию использовать для него макрос: это будет крайне ошибочный подход, поскольку вы загрязняете глобальное пространство имен коротким символом.

...