Pisane wersje operatorów logicznych
This is the only place I ' ve ever seen and
, or
i not
wymienione jako operatory rzeczywiste W C++. Kiedy pisałem program testowy w NetBeans, dostałem czerwone podkreślenie, jakby wystąpił błąd składni i stwierdziłem, że strona była zła, ale to NetBeans jest zły, ponieważ skompilował się i działał zgodnie z oczekiwaniami.
Widzę !
faworyzowanie not
ale czytelność and
&& or
wydaje się większy niż ich gramatyczni bracia. Dlaczego te wersje operatory logiczne istnieją i dlaczego pozornie nikt z nich nie korzysta? Czy to naprawdę poprawne C++, czy jakaś kompatybilność z C, która została dołączona do języka?
3 answers
Powstały w C w nagłówku <iso646.h>
. W tym czasie istniały klawiatury, które nie mogły wpisać wymaganych symboli dla &&
(na przykład), więc nagłówek zawierał #define
'S, które pomogłyby im w tym, Poprzez (w naszym przykładzie) zdefiniowanie and
jako &&
. Oczywiście z biegiem czasu stało się to coraz mniej wykorzystywane.
W C++ stały się tak zwanymi alternatywnymi tokenami . Czy Nie trzeba dołączyć cokolwiek, aby użyć tych tokenów w kompilator zgodny (jako taki, wersja C++-ified nagłówka C, <ciso646>
, jest pusta). Tokeny alternatywne są tak samo jak zwykłe tokeny, z wyjątkiem pisowni. Więc podczas parsowania and
jest dokładnie {[18] } tym samym co &&
, to tylko inny sposób pisowni tej samej rzeczy.
EDIT: widziałem bardzo niewielki wzrost ich użycia, odkąd to opublikowałem. Nadal ich unikam.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-06 23:43:48
Istnieją dla użyteczności (obsługa znaków w smakach klawiatury/wyświetlacza) i ogólnej czytelności, ale jest inny powód, który jest obecnie bardziej wyraźny. Prawie żadna z odpowiedzi tutaj, Tutaj, a nawet główna odpowiedź tutaj wyjaśnia główny powód, dla którego wielu z nas woli wersje słów niż wersje symboli (i główny powód, dla którego używają ich inne języki): błędy. Różnice między wersjami wyrazów są bardzo widoczne. Różnice między wersje symboli są znacznie mniej, do tego stopnia, że kuszą błędy w stosunkowo dużo większym stopniu: "x / y" to bardzo Nie "x / / y" , ale gdy osadzone w większym wyrażeniu, wielu z nas nie dostrzega różnicy. Jest to podobne do powszechnego przypadkowego mieszania operatora przypisania vs równości. Z tego powodu odstawiłem się od wersji symboli (nie było to łatwe) na rzecz wersji słownych. Wolałabym, żeby ktoś zrobił podwójne ujęcie z powodu naszej miłości do starych rzeczy, niż kusić robaki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:05
W C++ są prawdziwymi słowami kluczowymi. W języku C są to makra zdefiniowane w <iso646.h>
. Zobacz też http://web.archive.org/web/20120123073126/http://www.dinkumware.com/manuals/?manual=compleat&page=iso646.html.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-05 15:55:10