как инициализировать QString до нуля?

В чем разница между QString::number(0) и ((const char*) 0)?

Я хочу инициализировать QString, скажем, phoneNumber до null. Будут ли работать phoneNumber(QString::number(0)) и phoneNumber((const char*) 0)?


person user1065969    schedule 15.03.2012    source источник


Ответы (2)


Чтобы создать null QString, просто инициализируйте его по умолчанию:

QString phoneNumber;

// or if you already have a QString variable and want to 'clear' it:

phoneNumber = QString();

Обратите внимание, что QString::number(0) явно не равно нулю — он создает QString со значением "0".

Вы также можете инициализировать QString указателем NULL, но я бы не рекомендовал это делать, если только вы не передаете указатель независимо от того, является ли он NULL или нет (т. е. иногда он может указывать на строку C), поскольку в этом нет необходимости.

Вы также должны понимать следующий Qt документы:

Различие между нулевыми и пустыми строками

По историческим причинам QString различает нулевую строку и пустую строку. Нулевая строка — это строка, которая инициализируется с помощью конструктора по умолчанию QString или путем передачи (const char *)0 конструктору. Пустая строка — это любая строка размера 0. Нулевая строка всегда пуста, но пустая строка не обязательно равна нулю:

QString().isNull();               // returns true
QString().isEmpty();              // returns true

QString("").isNull();             // returns false
QString("").isEmpty();            // returns true

QString("abc").isNull();          // returns false
QString("abc").isEmpty();         // returns false

Все функции, кроме isNull(), обрабатывают пустые строки так же, как и пустые строки. Например, toAscii().constData() возвращает указатель на символ '\0' для нулевой строки (не нулевой указатель), а QString() сравнивается с QString(""). Мы рекомендуем всегда использовать функцию isEmpty() и избегать isNull().

person Michael Burr    schedule 15.03.2012
comment
Майкл, спасибо за ваш ответ, но мне неясно одно - оставляет ли str.clear() пустую строку или аннулирует ее. Если пусто, есть ли способ аннулировать его? - person yatsek; 30.03.2012
comment
QString::clear() устанавливает для строки значение null (т. е. после str.clear() функция str.isNull() возвращает true). - person Michael Burr; 30.03.2012

#include <QCoreApplication>
#include <QString>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString name(QString::null);
    // or QString name = QString::null;
    // or QString name;

    qDebug() << name.isNull();
    qDebug() << name;

    return a.exec();
}

Выход:

true
""

Решение Майкла Бёрра, конечно, тоже правильное... Но мне больше нравится QString::null.

person immerhart    schedule 14.09.2014
comment
Недурно за явное включение QString::null. Мне нравится, как это устраняет любую / всю двусмысленность в намерении. - person rob; 24.09.2015
comment
@RobertOliveira Согласен! Не знал об этом до сих пор. - person Andrew; 24.04.2016
comment
@rob Одним из недостатков использования QString::null является то, что в Windows это приведет к импорту символа данных, что, в свою очередь, запрещает delay-loading библиотеки Qt (соответственно Qt Core). - person Frerich Raabe; 02.07.2019
comment
Qt Creator теперь объявляет, что QString::null устарел. Вместо этого рекомендуется использовать String(). - person Ronan Paixão; 20.03.2021