2012-11-08 11 views
6

Jestem po prostu ciekawy. Powiedzmy na przykład, że muszę wypisać numer w konsoli.Qt: Co jest lepsze dla przekształcania liczby na QString, QVariant lub QString :: number

Kod byłoby:

#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()); 
} 

Która byłaby lepszą wydajność mądry? Myślę, że zużycie pamięci również jest inne. QVariant (liczba) .toString() oznaczałoby, że przechowuje QVariant w stosie. Nie jesteś pewien co do QString :: number(), czy nie powinien on po prostu wywoływać funkcji (oczywiście, funkcja ma return QString, więc jest przydzielana na stosie i zabiera to miejsce, a operacje są przydzielane i nieprzydzielane)? W każdym razie sizeof() daje mi 16 bajtów dla QVariant i 4 bajty dla QString.

Odpowiedz

4

Oczywiście drugi wariant jest lepszy.

to statyczna funkcja, która zwraca żądany ciąg znaków. Podczas korzystania z QVariant(number).toString(); najpierw tworzysz QVariant, a następnie przekształcasz go w pożądany ciąg, tworząc dodatkową i niepotrzebną zmienną typu QVariant.

Nie trzeba również przekształcać numeru w ciąg znaków, aby wyprowadzić go za pomocą qDebug. qDebug() << 42; działa dobrze.

+0

Tak też myślałem. Przydziela QVariant i po wywołaniu .toString() przydziela również QString i zwraca QString. –

+0

@Moraru, tak, dokładnie;) – SingerOfTheFall

1

Dlaczego nie po prostu

qDebug << number 

? Jeśli w przypadku quint8 wyprowadza znak zamiast samego numeru, a potem po prostu rzucić -

qDebug << static_cast<int>(number); 

lub (ten to trochę trudne do zrozumienia, patrzeć integralne promocjach)

qDebug << +number; 

I Zakładam, że ta opcja będzie lepsza (pod względem wydajności) w porównaniu z którąkolwiek z twoich sugestii.

+0

qDebug() był właśnie przykładem. Powiedzmy, że etykieta QLabel; label.setText (QString :: number (number)); –

Powiązane problemy