Ini adalah satu-satunya tempat yang pernah saya lihat and
, or
dan not
terdaftar sebagai operator sebenarnya di C ++. Ketika saya menulis program pengujian di NetBeans, saya mendapat garis bawah merah seolah-olah ada kesalahan sintaks dan menemukan situs web salah, tetapi NetBeans yang salah karena dikompilasi dan berjalan seperti yang diharapkan.
Saya bisa melihat !
lebih disukai not
tetapi keterbacaan and
&& or
tampaknya lebih besar daripada saudara gramatikal mereka. Mengapa versi operator logika ini ada dan mengapa tampaknya tidak ada yang menggunakannya? Apakah ini benar-benar C ++ valid atau semacam kompatibilitas dengan C yang disertakan dengan bahasa?
||
dan&&
, mungkin bahkan!
pada waktu tertentu. Kata-kata selalu lebih baik daripada "derau garis", belum lagi kemungkinan kebingungan dengan operator manipulasi bit.and
lebih mudah dibaca dan kemudian menulis "and
&&or
" meskipun :)Jawaban:
Mereka berasal dari C di header
<iso646.h>
. Pada saat itu ada keyboard yang tidak dapat mengetikkan simbol yang diperlukan untuk&&
(misalnya), sehingga header berisi#define
's yang akan membantu mereka dalam melakukannya, dengan (dalam contoh kami) mendefinisikanand
menjadi&&
. Tentu saja, seiring berjalannya waktu, hal ini semakin jarang digunakan.Di C ++, mereka menjadi apa yang dikenal sebagai token alternatif . Anda tidak perlu menyertakan apa pun untuk menggunakan token ini dalam kompiler yang sesuai (misalnya, header C versi C ++ - ified
<ciso646>
,, kosong). Token alternatif sama seperti token biasa, kecuali untuk ejaan. Jadi selama parsingand
adalah persis sama dengan&&
, itu hanya cara yang berbeda dari ejaan hal yang sama.Adapun penggunaannya: karena jarang digunakan, menggunakannya seringkali lebih mengejutkan dan membingungkan daripada membantu. Saya yakin jika itu normal, mereka akan jauh lebih mudah dibaca, tetapi orang-orang sudah terbiasa
&&
dan||
hal lain hanya mengganggu.EDIT: Saya telah melihat sedikit peningkatan dalam penggunaannya sejak saya memposting ini. Saya masih menghindari mereka.
sumber
or
ataunot
tanpa menyertakan header.Mereka memang ada untuk kegunaan (dukungan karakter dalam rasa keyboard / tampilan) dan keterbacaan umum, tetapi ada alasan lain yang saat ini lebih jelas. Hampir tidak ada jawaban disini , disini , atau bahkan jawaban utama disinimenguraikan alasan inti banyak dari kita lebih memilih versi kata daripada versi simbol (dan alasan utama bahasa lain menggunakannya): bug. Perbedaan antara versi kata sangat terlihat. Perbedaan antara versi simbol sangat sedikit, sampai pada titik bug yang menggoda ke tingkat yang relatif jauh lebih besar: "x | y" sangat bukan "x || y", namun ketika disematkan dalam ekspresi yang lebih besar banyak dari kita rindu perbedaannya. Ini mirip dengan pencampuran kebetulan yang umum dari operator penugasan vs kesetaraan. Untuk alasan ini saya telah menyapih diri saya dari versi simbol (itu tidak mudah) untuk mendukung versi kata. Saya lebih suka seseorang melakukan penilaian ganda pada mereka karena kecintaan kita pada hal-hal lama daripada menggoda serangga.
sumber
/Za
) untuk mendukung kata kunci alternatif (lihat stackoverflow.com/a/555524/368896 ). Itu diduga juga berdampak lain. Jadi, di Visual Studio, tidak selalu aman untuk menerima saran ini.x | y
secara visual cukup berbeda (dalam font monospace) darix || y
, tetapi saya menemukan!
in egif (!f(xyz) && ...
lebih mudah untuk dilewatkan daripadaif (not f(xyz) && ...
.and
,or
dannot
dalam ekspresi boolean, sebenarnya meningkatkan keterbacaan dan menyoroti perbedaan manipulasi bit. Jadi IMHO kita harus mempertimbangkan untuk mengubah kebiasaan lama kita tercinta menjadi lebih baik ...and
danor
bias pemikiran orang tentang bagaimana mereka harus bekerja? Misalnyaif (a == b or c)
alih-alihif (a == b || a == c)
- sesuatu seperti ini muncul hampir setiap hari di sini di StackOverflow. Simbol abstrak yang terputus dari bahasa Inggris mengurangi kesalahan ini.Di C ++, mereka adalah kata kunci yang nyata. Di C, mereka adalah makro yang ditentukan di
<iso646.h>
. Lihat http://web.archive.org/web/20120123073126/http://www.dinkumware.com/manuals/?manual=compleat&page=iso646.html .sumber
and
dan&&
secara fungsional sama di C ++. Theand
danor
operator yang benar-benar valid C ++ dan bagian dari standar bahasa.Untuk menguraikan jawaban lainnya dengan contoh konkret, ada alasan lain selain hanya "dibaca" untuk memilih
and
lebih&&
. Mengeja "dan" secara eksplisit saat logika AND adalah yang Anda maksud menghilangkan kemungkinan bug halus.Pertimbangkan ini:
Ketiga pernyataan-jika akan dikompilasi, tetapi yang terakhir berarti sesuatu yang sama sekali berbeda dan tidak diinginkan!
Jika Anda selalu menggunakan
and
saat yang Anda maksud adalah logika AND, Anda tidak akan pernah bisa secara tidak sengaja mengetik satu "&" dan kode Anda berhasil dikompilasi dan berjalan dengan hasil yang misterius.Latihan bagus lainnya: Coba hilangkan karakter "dan" secara tidak sengaja dan lihat apa yang terjadi. ;)
sumber
and
dan&&
secara fungsional identik" ke jawabannya ... Dan jika Anda membaca jawaban saya, Anda akan melihat bahwa saya mengatakan ini BUKAN tentang keterbacaan;)