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?

Author: Wolf, 2010-03-04

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.

Jeśli chodzi o ich użycie: ponieważ są one rzadko używane, używanie ich jest często bardziej zaskakujące i mylące niż pomocne. Jestem pewien, że gdyby to było normalne, byłyby o wiele łatwiejsze do odczytania, ale ludzie są tak przyzwyczajeni do Wszystko inne się rozprasza.

EDIT: widziałem bardzo niewielki wzrost ich użycia, odkąd to opublikowałem. Nadal ich unikam.

 91
Author: GManNickG,
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.

 12
Author: mr3,
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.

 9
Author: Chris Jester-Young,
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