Rumah > pembangunan bahagian belakang > C++ > Adakah Tandatangan Fungsi Impak Kontra Peringkat Atas dalam C ?

Adakah Tandatangan Fungsi Impak Kontra Peringkat Atas dalam C ?

Patricia Arquette
Lepaskan: 2024-11-09 07:23:02
asal
863 orang telah melayarinya

Does Top-Level Const Impact Function Signatures in C  ?

Konst Peringkat Atas Tidak Mempengaruhi Tandatangan Fungsi

Dalam C , senarai paramater fungsi menentukan tandatangan fungsi, tidak kira sama ada parameter diisytiharkan dengan const peringkat atas. Ini bermakna bahawa dua fungsi dengan jenis parameter yang sama, tetapi kelayakan const berbeza, akan mempunyai tandatangan fungsi yang sama.

int f(int); // can modify parameter
int f(const int); // cannot modify parameter
Salin selepas log masuk

Tingkah laku ini mungkin kelihatan berlawanan dengan intuisi, kerana kelayakan const harus mempengaruhi secara logik cara fungsi boleh mengemas kini parameternya. Walau bagaimanapun, perspektif pemanggil ialah perkara yang penting:

  • Apabila menghantar nilai const atau rujukan, pemanggil menjamin bahawa parameter tidak akan diubah suai.
  • Apabila menghantar nilai bukan const atau rujukan, pemanggil tidak membuat sebarang jaminan sedemikian.

Oleh itu, dari perspektif pemanggil, tandatangan fungsi adalah sama tanpa mengira kelayakan const pada parameter. Untuk menyediakan kefungsian yang berbeza, bentuk lebihan yang sesuai mesti digunakan, seperti:

void f(const int&); // pass by const reference
void f(int&); // pass by non-const reference
Salin selepas log masuk

Dalam sesetengah senario, adalah wajar untuk mencipta salinan parameter untuk mengekalkan ketekalan. Ini boleh dicapai dengan menghantar parameter mengikut nilai:

T f(const F&); // pass by const reference
T& f(F&); // pass by non-const reference
Salin selepas log masuk

Walau bagaimanapun, mencipta salinan parameter boleh memperkenalkan overhed prestasi atau rujukan memori tidak sah jika pemanggil bertujuan untuk menghantar objek sementara. Oleh itu, C tidak membuat salinan secara automatik untuk parameter const peringkat atas.

Atas ialah kandungan terperinci Adakah Tandatangan Fungsi Impak Kontra Peringkat Atas dalam 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