【问题标题】:explain this code with decltype in it用 decltype 解释这段代码
【发布时间】:2013-05-21 01:04:11
【问题描述】:
([] () -> decltype(std::cout << "Hello") {
    return std::cout << "Hello";
}()) << ", world!";

打印Hello, world!。

我只是不明白这里发生了什么。谁能简单的给我解释一下?

【问题讨论】:

  • 这是一个定义并立即执行的 lambda 函数。阅读这些内容。
  • 顺便说一句,相当于[]{return std::cout &lt;&lt; "Hello";}() &lt;&lt; ", world!";。
  • 首先他们用这些怪物毁了我心爱的可读 Python 语言,现在他们已经用 C++ 做到了。如果 ISO 的人想对 C 做同样的事情,我会追踪他们并用湿芹菜棒把他们打死(以延长痛苦):-)
  • @paxdiablo: Ewww...我讨厌芹菜...自我注意:不要加入 C 委员会。

标签: c++ decltype


【解决方案1】:
([] () -> decltype(std::cout << "Hello")

这将创建一个 lambda(就地函数),其返回类型与表达式 std::cout &lt;&lt; "Hello" 具有相同的返回类型 - 即 std::ostream&amp;。 [] 启动 lambda,() 是一个空参数列表,-&gt; 在返回类型之前,decltype(X) 相当于表达式 X 的类型。那么函数体:

{
    return std::cout << "Hello";
}

然后调用函数……输出“Hello”并返回流……

 ())

最后,向返回的流发送更多文本...

 << ", world!";

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多