gpt4 book ai didi

c++ - +[](){} 有什么不同;和 (+[](){});以及为什么表达式有效

转载 作者:行者123 更新时间:2023-12-03 07:11:39 25 4
gpt4 key购买 nike

正如标题所说。代码使用GNU c++2a编译

int main(){
(+[](){});
return 0;
}
编译得很好。
但是,以下代码生成 warning: value computed is not used [-Wunused-value]
int main(){
+[](){};
return 0;
}
进一步的问题是:我对表达 [](){} 的理解即,它返回一个右值对象 std::function<void()> .虽然,我不知道有一个一元运算符 + ,当 +适用于任何 r 值,是否应该是生成的编译错误?或者可能因为运算符优先级,表达式以另一种方式解释?

最佳答案

{} is, it returns an r-value object std::function<void()>


不,它创建了一个 lambda/closure,这是它自己的东西。在某些情况下,它会变成 std::function ,但您实际得到的更类似于仿函数(实现 operator() 的类)而不是 std::function - 这是可以调用的东西的类型删除持有人。 +符号强制将闭包转换为函数指针(因为这是唯一可以“容易”转换为可以对其应用一元 + 的东西),当包裹在 () 中时在列表上下文中“使用”指针值。没有它,你计算一个函数指针,然后立即丢弃它。它告诉你,你的 +标志是愚蠢的。

关于c++ - +[](){} 有什么不同;和 (+[](){});以及为什么表达式有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65030315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com