Che cos'è questa espressione smiley-with-beard: “<:] {%>”?


300

Mi sono imbattuto nel seguente programma, che viene compilato senza errori o anche avvisi:

int main(){
  <:]{%>; // smile!
}

Esempio dal vivo.

Cosa fa il programma e che cos'è quell'espressione sorridente?


44
Ho dato qualcosa in tal senso a un corso di programmazione come bonus. Sono cattivo, lo so. È molto imperscrutabile su Google.
chris

57
Bella circonlocuzione; Ho sentito che ti fanno causa per aver detto "ingovernabile".
opaco

3
@matt Hanno citato in giudizio sweeden
Edward

2
Potresti considerare di cambiare la risposta accettata?
nhahtdh,

4
@Mysticial: le risposte divertenti sono divertenti, ma alla fine non aiuta davvero i lettori.
nhahtdh,

Risposte:



354

Il programma utilizza digraph per rappresentare quanto segue:

[] {};

Questa è un'espressione lambda che non fa nulla. I simboli corrispondenti hanno questi equivalenti:

<: = [
%> = }

Sebbene oggi non siano generalmente necessari, i digraph sono utili quando la tastiera non ha alcuni tasti necessari per utilizzare il set di caratteri di base di C ++, vale a dire quelli grafici. La combinazione dei personaggi che compongono un digrafo viene elaborata come un singolo token. Questo a sua volta compensa eventuali tastiere non sufficientemente attrezzate o altro hardware o software.


66

Il programma utilizza digraphs , che consentono la programmazione C ++ con tastiere (o codifiche di testo) che potrebbero non avere i caratteri che C ++ utilizza in genere.

Il codice si risolve in questo:

int main(){
  []{}; // smile!
}

61
int main(){
  <:]{%>; // smile!
}

È fondamentalmente un'espressione Lambda (l' espressione Lambda è una delle funzionalità di C ++ 11 ) che utilizza digraphs (sia digraphs che trigraphs funzionano su C ++):

[] {};

Utilizzando solo digrafi:

<:]<%}; 

<:]<%%>;

[:>{%>; // like my cubic hat?

[:><%};

[:><%%>;

Mischiandoli con le trigrafi:

<:??)<%??>; // popeye

??(:>{??>; // pirate
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.