20

QString::number(0)とはどう違い((const char*) 0)ますか?

QStringへの発言phoneNumberを初期化したいnull。両方とも機能しますphoneNumber(QString::number(0))か?phoneNumber((const char*) 0)

4

2 に答える 2

48

null を作成するには、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 ドキュメントも理解しておく必要があります。

Null 文字列と空の文字列の違い

歴史的な理由から、QStringnull 文字列と空の文字列を区別します。null 文字列は、QStringのデフォルト コンストラクタを使用するか(const char *)0 、コンストラクタに渡すことによって初期化される文字列です。空の文字列は、サイズが 0 の任意の文字列です。null 文字列は常に空ですが、空の文字列が必ずしも 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

NULL 文字列を除くすべての関数isNull()は、空の文字列と同じように扱います。たとえば、ヌル文字列 (ヌル ポインターではない) の文字 toAscii().constData()へのポインターを返し、 等しいと比較します。常に関数を使用し、 を避けることをお勧めします。'\0'QString()QString("")isEmpty()isNull()

于 2012-03-15T17:43:23.537 に答える
15
#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もっと気に入っています。

于 2014-09-14T08:41:44.887 に答える