Hvornår blev 'og' og 'eller' alternative tokens introduceret i C++?

Hvornår blev 'og' og 'eller' alternative tokens introduceret i C++?

Fra den første ISO C++ standard C++98 , dette er beskrevet i 2.5/ Alternative tokens [lex.digraph] :

  1. Alternative token-repræsentationer findes for nogle operatorer og tegnsætningstegn.
  2. I alle henseender af sproget opfører hvert alternativt token sig henholdsvis det samme som dets primære token, bortset fra dets stavemåde. Sættet af alternative tokens er defineret i tabel 2.

Tabel 2 - Alternative tokens

alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
   <%          {    |    and         &&   |    and_eq      &=
   %>          }    |    bitor       |    |    or_eq       |=
   <:          [    |    or          ||   |    xor_eq      ^=
   :>          ]    |    xor         ^    |    not         !
   %:          #    |    compl       ~    |    not_eq      !=
   %:%:        ##   |    bitand      &    |

Så det har eksisteret siden de tidligste dage af C++ standardiseringsprocessen (a) . Grunden til, at så få mennesker er klar over det, er sandsynligvis, fordi den primære brugssag var for folk, der opererede i miljøer, hvor det fulde tegnsæt ikke nødvendigvis var tilgængeligt. For eksempel (og det strækker min hukommelse) havde EBCDIC-baseline-tegnsættet på IBM-mainframes ikke de firkantede parenteser [ og ] .

(a) De var sandsynligvis købt over fra C99, som introducerede disse digrafer (b) (den første kolonne ovenfor) til sproget og de alternative stavemåder (de to andre kolonner) i den nye iso646.h header-fil. Hverken K&R eller C89 nævner dem overhovedet.

(b) Standarden kalder dem di-grafer på trods af det faktum, at nogle faktisk har tre eller fire karakterer i stedet for to. Sprogpuristerne blandt os ville med rette forvente, at disse blev kaldt trigrafer og quadgrafer. C++-standarderne har i hvert fald en undskyldende fodnote om den forkerte brug, noget C-standarden stadig mangler :-)


MSVC understøtter dem kun som nøgleord, hvis du bruger /Za mulighed for at deaktivere udvidelser; dette er sandt fra mindst VC7.1 (VS2003).

Du kan få dem understøttet som makroer ved at inkludere iso646.h .

Mit gæt er, at de mener, at det ville bryde for meget eksisterende kode at gøre dem til søgeord som standard (og jeg ville ikke blive overrasket, hvis de har ret).

Dette blev diskuteret i et spørgsmål for et par uger siden et sted her på SO, men jeg kan ikke få SO's søgning eller Google til at finde det forbandede.


For faktisk at besvare spørgsmålet :

De blev defineret i den første C++-standard.