Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bilakah `operator bool` Eksplisit Berfungsi Tanpa Menghantar dalam C ?

Bilakah `operator bool` Eksplisit Berfungsi Tanpa Menghantar dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-10-26 23:46:31328semak imbas

 When Does an Explicit `operator bool` Work Without Casting in C  ?

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!

Kenyataan:
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