Rumah > pembangunan bahagian belakang > C++ > Apakah ODR-Guna dalam Fungsi Ahli Templat Kelas C?

Apakah ODR-Guna dalam Fungsi Ahli Templat Kelas C?

Linda Hamilton
Lepaskan: 2024-12-06 11:44:11
asal
982 orang telah melayarinya

What is ODR-Use in C   Class Template Member Functions?

Memahami ODR-Use dalam C

Dalam konteks pengaturcaraan C, konsep "odr-use" sering timbul apabila membincangkan kelas fungsi ahli templat.

Peraturan Satu Definisi (ODR) memastikan bahawa terdapat satu definisi yang konsisten untuk setiap entiti merentas semua unit terjemahan dalam program. ODR-use mentakrifkan apabila entiti mesti mempunyai definisi yang disediakan, berbanding hanya pengisytiharan.

Menurut piawaian C, fungsi tanpa beban berlebihan digunakan jika:

  • Namanya muncul dalam ungkapan yang berpotensi dinilai.
  • Ia ialah ahli set fungsi calon yang dipilih oleh resolusi lebihan beban.
  • Ia adalah fungsi maya bukan tulen.

ODR-Penggunaan dan Fungsi Ahli Templat Kelas

Untuk templat kelas fungsi ahli, peraturan penggunaan ODR bermakna bahawa ia hanya akan digunakan jika ia ialah:

  • Dipanggil secara eksplisit.
  • Maya dan kelas itu sendiri dibuat seketika (walaupun fungsi tidak dipanggil).

Peraturan ini memastikan bahawa fungsi ahli templat hanya digunakan apabila ia benar-benar diperlukan. Secara lalai, pengkompil tidak akan membuat seketika fungsi ahli yang tidak digunakan, menjimatkan masa kompilasi.

Penggunaan ODR dan Unit Kompilasi Berbilang

Apabila menggunakan berbilang unit kompilasi, pengkompil mesti memastikan bahawa semua entiti odr-digunakan ditakrifkan dengan tepat sekali. Ia mencapai ini melalui konsep "templat utama." Templat utama ialah instantiasi pertama templat dalam unit terjemahan. Semua instantiasi templat berikutnya dalam unit terjemahan lain dianggap sebagai instantiation sekunder.

Templat utama bertanggungjawab untuk menyediakan takrif entiti yang digunakan oleh odr. Jika fungsi ahli digunakan secara odr tetapi tidak dipanggil dalam templat utama, ia masih mesti diisytiharkan dengan definisi untuk memenuhi ODR.

Memajukan Semua Fungsi Ahli

Mengemukakan templat kelas secara eksplisit menjamin instantiasi semua fungsi ahli, termasuk fungsi yang digunakan odr yang tidak dipanggil. Ini memastikan definisi lengkap tersedia untuk semua unit kompilasi, mengelakkan kemungkinan ralat pautan. Walau bagaimanapun, ia tidak semestinya perlu atau cekap untuk membuat seketika fungsi ahli yang tidak digunakan.

Atas ialah kandungan terperinci Apakah ODR-Guna dalam Fungsi Ahli Templat Kelas C?. 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