305

我遇到了以下程序,它编译时没有错误甚至警告:

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

活生生的例子。

程序是做什么的,那个笑脸是什么?

4

4 回答 4

360

该程序使用有向图来表示以下内容:

[] {};

这是一个什么都不做的 lambda 表达式。相应的符号具有以下等价物:

<: = [
%> = }

尽管现在通常不需要它们,但当您的键盘缺少使用 C++ 的基本源字符集(即图形字符集)所需的某些键时,二合字母很有用。组成有向图的字符组合作为单个标记处理。这反过来弥补了任何装备不足的键盘或其他此类硬件或软件。

于 2013-04-01T00:56:13.927 回答
297

这是一个使用有向图伪装的空 lambda。普通的 lambda 人没有胡须。

于 2013-04-01T00:56:06.740 回答
68

该程序使用digraphs,它允许使用可能没有 C++ 通常使用的字符的键盘(或文本编码)进行 C++ 编程。

代码解决了这个问题:

int main(){
  []{}; // smile!
}
于 2013-04-01T00:59:42.330 回答
62
int main(){
  <:]{%>; // smile!
}

它基本上是一个使用有向图的Lambda 表达式(Lambda 表达式是C++11的功能之一)(有向图和三联图都适用于 C++):

[] {};

仅使用有向图:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

将它们与三字母组合:

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

??(:>{??>; // pirate
于 2013-04-03T11:45:28.300 回答