Подтвердить что ты не робот

Преимущество QString над std::string

Какие преимущества предлагает QString над std::string? Может ли обычный std::string хранить символы юникода? Я пытаюсь написать программу, которая откроет различные файлы песен. Имя этих файлов может быть на разных языках. Я слышал, что использование обычной строки в таких случаях будет работать неправильно. Я хочу сохранить приложение независимо от QT и повторно использовать код, например, в android. Что вы предлагаете.

4b9b3361

Ответ 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 предназначена для работы с ней.