Какие преимущества предлагает QString над std::string? Может ли обычный std::string хранить символы юникода? Я пытаюсь написать программу, которая откроет различные файлы песен. Имя этих файлов может быть на разных языках. Я слышал, что использование обычной строки в таких случаях будет работать неправильно. Я хочу сохранить приложение независимо от QT и повторно использовать код, например, в android. Что вы предлагаете.
Преимущество QString над std::string
Ответ 1
QString
позволяет работать с Unicode, имеет более полезные методы и интегрируется с Qt. Он также имеет лучшую производительность, так как cbamber85 отметил.
std::string
просто хранит байты, когда вы даете им, он ничего не знает о кодировках. Он использует один байт на символ, но этого недостаточно для всех языков в мире. Лучшим способом хранения ваших текстов, вероятно, будет кодировка UTF-8, в которой символы могут занимать различное количество байтов, а std::string
просто не может справиться с этим правильно! Это, например, означает, что метод length
возвращает количество байтов, а не символов. И это всего лишь верхушка айсберга...
Ответ 2
Если вы используете фреймворк Qt для написания своего программного обеспечения, вам лучше использовать QString. Простая причина в том, что почти все функции Qt, которые работают с строками, будут принимать QString. Если вы используете std::string, вы можете оказаться в ситуациях, когда вам придется присваивать код от одного к другому. Вы должны использовать std::string, если ваше программное обеспечение вообще не использует Qt. Это сделает ваш код более переносимым и не зависит от дополнительной структуры, которую пользователи должны будут установить для использования вашего программного обеспечения.
Ответ 3
Я не знаком с QString
, но большое преимущество std::string
что он является стандартным. Что касается Unicode, нет проблем
сохранение UTF-8 в std::string
; в зависимости от того, что вы делаете,
однако было бы лучше использовать std::wstring
(который обычно
будет хранить UTF-16 или UTF-32).
Для сложных манипуляций с Unicode я бы предложил ICU. Но для много приложений, достаточно хранить UTF-8.
Ответ 4
Технически существует стандартный класс строк для хранения любого типа символов: std::basic_string
. std::string
и std::wstring
- это не что иное, как специализации std::basic_string
для char
и wchar
. Существуют также специализации std::u16string
и std::u32string
, предназначенные для хранения UTF-16 и UTF-32.
В любом случае, если вам нужно работать с Qt, QString
, вероятно, всегда будет лучшей альтернативой, чем любая стандартная строка библиотеки, так как вся инфраструктура Qt предназначена для работы с ней.