Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencegah Penukaran Tersirat dalam Fungsi Tidak Membina dalam C ?

Bagaimanakah Saya Boleh Mencegah Penukaran Tersirat dalam Fungsi Tidak Membina dalam C ?

Linda Hamilton
Lepaskan: 2024-12-03 08:18:18
asal
316 orang telah melayarinya

How Can I Prevent Implicit Conversions in Non-Constructing Functions in C  ?

Penghindaran Penukaran Tersirat untuk Fungsi Tidak Membina

Pertimbangkan fungsi bukan pembinaan yang menjangkakan parameter integer tetapi membenarkan hantaran tersirat daripada jenis lain seperti aksara, boolean dan longs. Untuk mengelakkan tingkah laku yang tidak diingini ini dan memastikan bahawa fungsi hanya menerima parameter jenis yang ditentukan, kami boleh menggunakan teknik berikut:

C 11 dan Kaedah Kemudian:

The pendekatan yang paling langsung adalah untuk menentukan templat fungsi yang sepadan dengan semua jenis lain:

void function(int); // this will be selected for int only

template <class T>
void function(T) = delete; // C++11
Salin selepas log masuk

Ini berfungsi kerana bukan templat berfungsi dengan langsung pemadanan diutamakan.

Teknik Pra-C 11:

Sebelum C 11, penyelesaian alternatif melibatkan mewujudkan kelas pembantu untuk menguatkuasakan tingkah laku yang diingini:

// because this ugly code will give you compilation error for all other types
class DeleteOverload
{
private:
    DeleteOverload(void*);
};


template <class T>
void function(T a, DeleteOverload = 0);

void function(int a)
{}
Salin selepas log masuk

Teknik ini bergantung pada beban berlebihan berbilang fungsi dengan tandatangan yang serupa, di mana fungsi dengan jenis yang dijangkakan mengambil masa keutamaan.

C 23 Kemas Kini:

C 23 memperkenalkan cara yang lebih ringkas dan bermaklumat untuk menangani situasi ini:

void function(int) {} // this will be selected for int only

template <class T>
void function(T) {
    // since C++23
    static_assert(false, "function shall be called for int only");
} 
Salin selepas log masuk

Menggunakan static_assert dalam templat fungsi memberikan mesej ralat yang jelas apabila memanggil fungsi dengan jenis parameter yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Penukaran Tersirat dalam Fungsi Tidak Membina 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