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

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

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

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

4b9b3361

Ответ 1

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

QString phoneNumber;

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

phoneNumber = QString();

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

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

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

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

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

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().

Ответ 2

#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 больше.