【问题标题】:Printing the smiley-with-beard lambda expression打印有胡子的笑脸 lambda 表达式
【发布时间】:2015-10-07 04:29:44
【问题描述】:

我尝试打印 smiley-with-beard lambda 表达式

#include <iostream>

int main() {
    std::cout << <:]{%>; // smile!
    return 0;
}

但是打印出来了

1

相反。怎么样?

【问题讨论】:

  • 将 <:> 放在引号中,如 "<:>"
  • 可能会触发隐式转换为指向函数的非空指针并打印为布尔值

标签: c++ c++11 lambda digraphs


【解决方案1】:

正如answers 中对您所链接的问题所解释的那样,

<:]{%>

等价于

[]{}

不捕获任何内容的 lambda 表达式可以隐式转换为函数指针。在这种情况下,这个函数指针的签名是void(*)()

现在,函数指针是implicitly convertible to a boolean value,它始终是true,因此输出打印为1

【讨论】:

    【解决方案2】:

    你忘了在 <:> 周围加上 "。

    你应该有:

    std::cout << "<:]{%>";
    

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 2013-03-22
      • 2017-05-25
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多