【发布时间】:2012-03-15 17:26:42
【问题描述】:
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) 都可以吗?
【问题讨论】:
要创建一个空的QString,只需默认初始化它:
QString phoneNumber;
// or if you already have a QString variable and want to 'clear' it:
phoneNumber = QString();
请注意,QString::number(0) 绝对不为 null - 它创建一个值为 "0" 的 QString。
您也可以使用 NULL 指针初始化 QString,但我不建议这样做,除非您传递一个指针,无论它是否为 NULL(即,它有时可能指向C 字符串),因为它是不必要的。
你也应该了解following Qt docs:
空字符串和空字符串的区别
由于历史原因,
QString区分空字符串 和一个空字符串。空字符串是已初始化的字符串 使用QString的默认构造函数或通过(const char *)0给构造函数。空字符串是大小为 0 的任何字符串。空字符串 string 始终为空,但空字符串不一定为 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()。
【讨论】:
QString::clear() 将字符串设置为空(即,在str.clear() 之后,str.isNull() 将返回true)。
#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
""
Michael Burr 的解决方案当然也是正确的……但我更喜欢QString::null。
【讨论】:
QString::null 的一个缺点是,在Windows 上,它会导致导入数据符号——这反过来又会禁止delay-loading Qt(或Qt Core)库。
QString::null 已被弃用。它建议改用String()。