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)
は明確にnotnullであることに注意してください。値が_"0"
_のQStringが作成されます。
QString
をNULL
ポインタで初期化することもできますが、NULL
かどうかに関係なく、ポインタを渡さない限り(つまり、不要な場合があるため、C文字列を指す場合があります)。
以下のQtドキュメント についても理解する必要があります。
Nullと空の文字列の区別
歴史的な理由により、
QString
はnull文字列と空の文字列を区別します。 null文字列は、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()
を除くすべての関数は、null文字列を空の文字列と同じように扱います。たとえば、toAscii().constData()
は(nullポインターではなく)null文字列の_'\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
がもっと好きです。