как инициализировать QString для нуля? - PullRequest
17 голосов
/ 15 марта 2012

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

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

Ответы [ 2 ]

41 голосов
/ 15 марта 2012

Чтобы создать ноль 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().

15 голосов
/ 14 сентября 2014
#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 больше.

...