QString в const std::string

Я хочу присвоить значение в QString константе std::string

QString qfile("some value");

это константная переменная std::string

const std::string file

Код, который я использую

file = qfile.toStdString();

приведенные выше коды отлично работают для обычного std::string . Но есть некоторая проблема из-за ключевого слова 'const'. Как мне это решить?


person Vihaan Verma    schedule 27.06.2012    source источник
comment
Любая работа вокруг? Да: если вы хотите что-то изменить, не объявляйте об этом const. Или, если вы хотите, чтобы он был неизменным, не пытайтесь его изменить.   -  person Mike Seymour    schedule 27.06.2012
comment
Возможно, const_cast, но какова логика, которая требует, чтобы вы присваивали константной переменной? Возможно, вам следует обновить это, а не применять обходной путь?   -  person Stefan    schedule 27.06.2012
comment
@Stefan: const_cast заставит его скомпилироваться, но попытка изменить объект const приводит к неопределенному поведению.   -  person Mike Seymour    schedule 27.06.2012
comment
обратите внимание, что Qt::toStdString() по умолчанию преобразует строку в кодировку Latin1, и из-за этого любые символы, которые не могут быть представлены в кодировке Latin1, будут потеряны. Если вы используете этот std::string для имен файлов, вы не сможете обрабатывать файлы с именами, содержащими специальные символы. Вместо этого вы можете использовать const std::string file = qFile.toUtf8().constData();. Но в Windows вы все равно не сможете использовать std::string для файловых операций, потому что Windows не поддерживает должным образом UTF8.   -  person smerlin    schedule 27.06.2012
comment
@VihaanVerma: Почему вы вообще объявили это const? Нам действительно нужно это знать.   -  person ereOn    schedule 27.06.2012


Ответы (3)


Не используйте оператор присваивания для инициализации объекта std::string, а инициализируйте переменную напрямую.

const std::string file = qfile.toStdString();

Кроме того, убедитесь, что вы знаете, какую кодировку использует QString::toStdString(); в отличие от QString, std::string не зависит от кодировки (это строка байтов, а не символов).

person Frerich Raabe    schedule 27.06.2012
comment
(вставьте сюда обычный комментарий о самом неприятном разборе) - person Matteo Italia; 27.06.2012
comment
переменная уже используется в коде. Я просто хочу обновить его содержимое. - person Vihaan Verma; 27.06.2012
comment
@VihaanVerma: вы не можете, иначе const не будет иметь смысла. - person Matteo Italia; 27.06.2012

Константы – это выражения с фиксированным значением.

http://www.cplusplus.com/doc/tutorial/constants/

person Jake1164    schedule 27.06.2012

Вы также можете избавиться от const, скопировав возвращаемое значение toStdString():

QString str("text");
std::string std_str(str.toStdString());
person weggo    schedule 27.06.2012