Mi sono imbattuto nel seguente programma, che viene compilato senza errori o anche avvisi:
int main(){
<:]{%>; // smile!
}
Cosa fa il programma e che cos'è quell'espressione sorridente?
Mi sono imbattuto nel seguente programma, che viene compilato senza errori o anche avvisi:
int main(){
<:]{%>; // smile!
}
Cosa fa il programma e che cos'è quell'espressione sorridente?
Risposte:
È una lambda vuota che usa un travestimento da digrafo. I lambda normali non hanno la barba.
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.
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!
}
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