Bool Operator Eksplisit Tanpa Hantar
Apabila mereka bentuk kelas yang mempunyai penukaran eksplisit kepada bool, seseorang mungkin tertanya-tanya di mana ia boleh digunakan sebagai boolean tanpa hantaran eksplisit .
Penukaran Kontekstual kepada bool
Standard C mentakrifkan senario tertentu di mana nilai boleh "ditukar secara kontekstual kepada bool." Situasi ini termasuk dalam empat kategori utama:
1. Pernyataan:
- jika (t) /* pernyataan */;
- untuk (; t;) /* pernyataan */;
- semasa ( t) /* pernyataan */;
- buat { /* blok */ } sambil (t);
2. Ungkapan:
- !t
- t && t2
- t || t2
- t ? "benar" : "salah"
3. Ujian Masa Kompilasi:
- static_assert(t);
- noexcept(t)
- explicit(t)
- if constexpr (t)
4. Algoritma dan Konsep:
- NullablePointer T
- std::remove_if(...)
- std::sort(...)
Kaveat dengan Operator Const dan Bukan Const
Perlu diperhatikan bahawa gabungan operator penukaran const dan bukan const boleh menyebabkan kekeliruan. Rujuk soalan berkaitan di bawah untuk mendapatkan maklumat lanjut:
- [Mengapa penukaran bool() eksplisit tidak berlaku dalam penukaran kontekstual?](https://stackoverflow.com/questions/5580156/why- doesnt-explicit-bool-conversion-happen-in-contextual-conversion)
- [Mengapa operator eksplisit bool tidak berkuat kuasa seperti yang dijangkakan?](https://stackoverflow.com/questions/26578447/why -adakah-pengendali-eksplisit-bool-tidak-berkesan-seperti-yang-jangka)
Atas ialah kandungan terperinci Bilakah `operator bool` Eksplisit Berfungsi Tanpa Menghantar dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!