Bagaimana untuk Mencapai Go-Style Defer dalam C Tanpa Mengorbankan Prestasi?

Mary-Kate Olsen
Lepaskan: 2024-11-02 21:06:30
asal
406 orang telah melayarinya

How to Achieve Go-Style Defer in C   Without Sacrificing Performance?

Tangguhkan Pelaksanaan dalam C

Konsep penangguhan gaya Go, yang membolehkan pembersihan sumber yang bersih dan ringkas, telah mendapat populariti dalam C . Walau bagaimanapun, mencari pelaksanaan pustaka standard atau disokong baik untuk ciri ini boleh menjadi mencabar.

Walaupun tiada sokongan terbina dalam untuk penangguhan dalam Pustaka Templat Standard (STL) atau Boost, terdapat pelaksanaan luaran yang tersedia . Satu pelaksanaan sedemikian ialah penyelesaian sifar overhed yang ringan:

<code class="cpp">#ifndef defer
struct defer_dummy {};
template <class F> struct deferrer { F f; ~deferrer() { f(); } };
template <class F> deferrer<F> operator*(defer_dummy, F f) { return {f}; }
#define DEFER_(LINE) zz_defer##LINE
#define DEFER(LINE) DEFER_(LINE)
#define defer auto DEFER(__LINE__) = defer_dummy{} *[&amp;]()
#endif // defer</code>
Salin selepas log masuk

Pelaksanaan ini memerlukan persediaan yang minimum dan boleh disepadukan dengan mudah ke dalam pangkalan kod anda. Sintaksnya adalah mudah:

<code class="cpp">defer { statements; };</code>
Salin selepas log masuk

Sebagai contoh, dalam coretan kod berikut, operasi fclose dilaksanakan secara automatik apabila skop fungsi read_entire_file dikeluarkan:

<code class="cpp">auto file = std::fopen(filename, "rb");
if (!file)
    return false;

defer { std::fclose(file); }; // don't need to write an RAII file wrapper.

// ...</code>
Salin selepas log masuk

Sifar ini -pelaksanaan overhed menawarkan cara yang mudah dan cekap untuk mengurus pembersihan sumber dalam C , menyediakan ciri penangguhan Go-like tanpa memerlukan kelas RAII yang kompleks atau teknik pengurusan memori tersuai.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Go-Style Defer dalam C Tanpa Mengorbankan Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!