使用decltype解释这段代码

4
([] () -> decltype(std::cout << "Hello") {
    return std::cout << "Hello";
}()) << ", world!";

打印出Hello, world!

我完全不理解这里到底发生了什么。有没有人能用简单的语言解释一下?


1
这是一个定义并立即执行的 Lambda 函数。阅读有关这些内容的资料。 - Kirill Kobelev
1
顺便说一下,这相当于[]{return std::cout << "Hello";}() << ", world!"; - chris
1
他们先是用这些可怕的东西毁了我心爱的易读Python语言,现在他们也对C++下手了。如果ISO机构有一天也想对C做同样的事情,我会追踪他们并用湿芹菜棍子打死他们(以延长痛苦) :-) - paxdiablo
1
@paxdiablo:呸……我讨厌芹菜……给自己留个便条:不要参加 C 委员会。 - Tony Delroy
1个回答

6
([] () -> decltype(std::cout << "Hello")

这将创建一个 lambda 函数(即内部函数),其返回类型与表达式 std::cout << "Hello" 相同 - 即为 std::ostream&[] 开始 lambda 函数,() 是一个空参数列表,-> 前缀指定了返回类型,decltype(X) 等同于表达式 X 的类型。然后是函数体:

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

然后调用该函数...输出"Hello"并返回流...
 ())

最后,向返回的流发送一些文本...
 << ", world!";

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