web-dev-qa-db-ja.com

QStringをnullに初期化する方法

QString::number(0)と_((const char*) 0)_の違いは何ですか?

QStringを初期化したいphoneNumbernullに。 phoneNumber(QString::number(0))phoneNumber((const char*) 0)はどちらも機能しますか?

17
user1065969

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が作成されます。

QStringNULLポインタで初期化することもできますが、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()は使用しないことをお勧めします。

42
Michael Burr
#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がもっと好きです。

15
immerhart