Rumah >pembangunan bahagian belakang >C++ >Mengapakah `atof` Gagal Menukar `std::string` kepada `double` dalam Qt, dan Apakah Alternatifnya?

Mengapakah `atof` Gagal Menukar `std::string` kepada `double` dalam Qt, dan Apakah Alternatifnya?

Linda Hamilton
Linda Hamiltonasal
2024-12-03 19:02:10173semak imbas

Why Does `atof` Fail to Convert `std::string` to `double` in Qt, and What Are the Alternatives?

std::string kepada Double Conversion Isu: Menggunakan atof dengan Qt Projects

Menukar std::string kepada double menggunakan atof fungsi boleh menjadi masalah dalam projek Qt. Mari kita periksa kod dan teroka pendekatan alternatif:

Kod yang disediakan:

std::string num = "0.6";
double temp = (double)atof(num.c_str());

cuba menukar std::string kepada double. Walau bagaimanapun, ia mengembalikan sifar. Isu ini timbul kerana QString, yang biasa digunakan dalam Qt, diluluskan sebagai const char*.

Untuk menyelesaikannya, hantar QString secara eksplisit kepada menggandakan:

QString winOpacity("0.6");
double temp = winOpacity.toDouble();

Sebagai alternatif, QByteArray::toDouble boleh digunakan untuk penukaran yang lebih pantas apabila bekerja dengan const char*.

Untuk projek bukan Qt, sintaks berikut adalah sah:

std::string num = "0.6";
double temp = ::atof(num.c_str());

Walaupun aliran rentetan atau boost::lexical_cast juga boleh melakukan penukaran, mereka dikenakan penalti prestasi.

Atas ialah kandungan terperinci Mengapakah `atof` Gagal Menukar `std::string` kepada `double` dalam Qt, dan Apakah Alternatifnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn