В чем разница между QString::number(0)
и ((const char*) 0)
?
Я хочу инициализировать QString
, скажем, phoneNumber
до null
. Будут ли работать phoneNumber(QString::number(0))
и phoneNumber((const char*) 0)
?
В чем разница между QString::number(0)
и ((const char*) 0)
?
Я хочу инициализировать QString
, скажем, phoneNumber
до null
. Будут ли работать phoneNumber(QString::number(0))
и phoneNumber((const char*) 0)
?
Чтобы создать 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()
.
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
.
QString::null
является то, что в Windows это приведет к импорту символа данных, что, в свою очередь, запрещает delay-loading библиотеки Qt (соответственно Qt Core).
- person Frerich Raabe; 02.07.2019
QString::null
устарел. Вместо этого рекомендуется использовать String()
.
- person Ronan Paixão; 20.03.2021