В чем разница между QString::number(0)
и ((const char*) 0)
?
Я хочу инициализировать QString
say phoneNumber
до null
. Будут ли работать phoneNumber(QString::number(0))
и phoneNumber((const char*) 0)
?
В чем разница между QString::number(0)
и ((const char*) 0)
?
Я хочу инициализировать QString
say phoneNumber
до null
. Будут ли работать phoneNumber(QString::number(0))
и phoneNumber((const char*) 0)
?
Чтобы создать нулевое значение 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()
.
#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
больше.