2012-11-08 54 views
6

私は興味があります。たとえば、コンソールに数値を出力する必要があるとします。Qt:数値をQString、QVariant、QString :: numberに変換すると良いです。

コードは次のようになります。優れたパフォーマンスを賢明だろう

#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(数値).toString()は、QVariantをスタックに格納することを意味します。 QString :: number()についてはわかりませんが、単に関数を呼び出すべきではありません(関数にはQStringの戻り値があるのでスタックにも割り当てられ、その領域とその操作が割り当てられ、割り当てが解除されます)。 とにかく、sizeof()はQVariantでは16バイト、QStringでは4バイトを返します。

答えて

4

もちろん、2番目の変種が優れています。

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

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

+0

それも私が考えていたものです。 QVariantを割り当て、.toString()を呼び出した後、QStringを割り当ててQStringを返します。 –

+0

@Moraru、はい、まさに;) – SingerOfTheFall

1

なぜ単に

qDebug << number 

qDebug << static_cast<int>(number); 

または

qDebug << +number; 

Iを(これは不可欠なプロモーションを、理解ルックアップするために少しトリッキーです) - quint8の場合には、それは代わりに数自体の文字を出力した場合は、単にキャストあなたの提案のいずれかと比較して、このオプションはより良い(パフォーマンス上の)ことを賭けています。

+0

qDebug()はまさに例です。 QLabelというラベルを付けましょう。 label.setText(QString :: number(number)); –

関連する問題