Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Membenamkan std::strings Terformat dengan Cekap ke dalam Strim Fail dalam C Moden?

Bagaimanakah Saya Boleh Membenamkan std::strings Terformat dengan Cekap ke dalam Strim Fail dalam C Moden?

Susan Sarandon
Lepaskan: 2024-12-18 21:02:15
asal
998 orang telah melayarinya

How Can I Efficiently Embed Formatted std::strings into File Streams in Modern C  ?

Membenamkan std::rentetan Berformat dalam Strim Fail dengan sprintf

C Moden memperkemas penyepaduan std::rentetan berformat sprintf ke dalam fail aliran. Teknik yang lebih baharu menawarkan peningkatan ketara berbanding kaedah lama.

C 20

C 20 memperkenalkan std::format, membolehkan pemformatan rentetan mudah menggunakan medan gantian seperti python:

#include <iostream>
#include <format>

int main() {
    std::cout << std::format("Hello {}!\n", "world");
}
Salin selepas log masuk

C 11

C 11's std::snprintf menyediakan pilihan yang selamat dan mesra pengguna:

#include <memory>
#include <string>
#include <stdexcept>

template<typename ... Args>
std::string string_format(const std::string& format, Args ... args) {
    int size_s = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1;
    if (size_s <= 0) { throw std::runtime_error("Error during formatting."); }
    size_t size = static_cast<size_t>(size_s);
    std::unique_ptr<char[]> buf(new char[size]);
    std::snprintf(buf.get(), size, format.c_str(), args ...);
    return std::string(buf.get(), buf.get() + size - 1);
}
Salin selepas log masuk

注意事项

  • Gunakan std::snprintf untuk menentukan saiz penimbal yang diperlukan sebelum menulis ke char[].
  • Semak sebarang ralat pemformatan selepas menggunakan std::snprintf.
  • Gunakan unique_ptr untuk mengurus memori tatasusunan aksara yang diperuntukkan.

Tambahan Pilihan

  • std::snprintf dinamakan semula kepada _snprintf dalam pengkompil Microsoft.
  • Untuk fungsi yang diperluaskan dan ciri keselamatan, pertimbangkan untuk menggunakan {fmt} perpustakaan.

Kesimpulan

Teknik C Moden bertambah baik dengan ketara apabila pendekatan lama untuk menggabungkan std::string berformat ke dalam strim fail. Memilih C 20's std::format menyediakan penyelesaian yang paling diperkemas dan selamat. C 11's std::snprintf menawarkan alternatif yang kukuh untuk keserasian ke belakang, manakala perpustakaan luaran seperti {fmt} boleh meningkatkan lagi fungsi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenamkan std::strings Terformat dengan Cekap ke dalam Strim Fail dalam C Moden?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan