这个带胡子的笑脸表情是什么意思:"<:]{%>"?

305
我遇到了下面这个程序,它可以编译而且没有任何错误或警告:
int main(){
  <:]{%>; // smile!
}

实时示例。

这个程序是做什么的,那个笑脸表情是什么意思?


2
请问您是否考虑更改已接受的答案? - nhahtdh
1
@nhahtdh 他不能这样做。Robot(被接受答案的作者)说他会删除他的答案。给他打勾的整个意义在于防止他这样做,因为我们不想失去有价值的答案。 - Mysticial
4
@Mysticial:有趣的回答固然有趣,但归根结底,它并不能真正帮助读者。 - nhahtdh
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Yakk - Adam Nevraumont
1
请不要这样编辑标题。它并不是“长”,而是作为表达式使用的,这是问题的重点(否则它可能只是在评论中使用)。 - Xeo
4个回答

364

该程序使用双字符来表示以下内容:

[] {};

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

<: = [
%> = }

虽然在今天通常不需要,但是当您的键盘缺少使用C++基本源字符集所需的某些图形字符时,双字母组还是很有用的。组成双字母组的字符组合被处理为单个标记。这反过来弥补了任何硬件或软件设备的不足。


300

这是一个使用音位符号伪装的空 lambda。普通 lambda 没有胡子。


70

该程序正在使用双字符,这使得C++编程可以在可能没有C++通常使用的字符的键盘(或文本编码)上进行。

代码解析如下:

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

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

这基本上是使用C++11Lambda表达式(Lambda表达式是C++11的一个特性),并使用digraphs(digraphs和trigraphs都适用于C++):

[] {};

仅使用双字母符号:

<:]<%}; 

<:]<%%>;

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

将它们与三连符混合使用:
<:??)<%??>; // popeye

??(:>{??>; // pirate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接