6

ただ興味があるだけ。たとえば、コンソールに数値を出力する必要があるとします。

コードは次のようになります。

#include <QDebug>
#include <QVariant>
#include <QString>

void displayNumber(quint8 number) {
    qDebug() << QVariant(number).toString();
    qDebug() << QString::number(number);
//or for example 
//  QLabel label; 
//  label.setText(QString::number(number));
//or 
//  label.setText(QVariant(number).toString());
}

パフォーマンスの面でどちらが優れているでしょうか?メモリ消費量も違うと思います。QVariant(number).toString()は、QVariantをスタックに格納することを意味します。QString :: number()についてはよくわかりませんが、関数を呼び出すだけではいけません(確かに、関数にはQStringが返されるため、スタックにも割り当てられ、そのスペースとその操作によって割り当てと割り当て解除が行われます)?とにかく、sizeof()はQVariantに16バイト、QStringに4バイトを与えてくれます。

4

2 に答える 2

4

もちろん、2番目のバリアントの方が優れています。

QString::number()目的の文字列を返す静的関数です。を使用するQVariant(number).toString();ときは、最初にを作成しQVariant、それを目的の文字列に変換するのではなく、余分で不要なQVariant型の変数を作成します。

また、で出力するために数値を文字列に変換する必要はありませんqDebugqDebug() << 42;正常に動作します。

于 2012-11-08T10:56:08.433 に答える
1

なぜ単純ではないのですか

qDebug << number

?数字自体の代わりに文字を出力する場合は、quint8キャストするだけです-

qDebug << static_cast<int>(number);

または(これは理解するのが少し難しいです、不可欠なプロモーションを調べてください)

qDebug << +number;

私は、このオプションがあなたの提案のいずれかと比較して(パフォーマンス的に)優れていると確信しています。

于 2012-11-08T10:54:42.150 に答える