为了账号安全,请及时绑定邮箱和手机立即绑定

“+[]{}”-这是什么巫术?

“+[]{}”-这是什么巫术?

C++
森栏 2019-07-01 16:06:21
“+[]{}”-这是什么巫术?在堆栈溢出问题中重新定义C+11中不允许的lambdas,为什么?,给出了一个不编译的小程序:int main() {     auto test = []{};     test = []{};}问题被回答了,一切似乎都很好。然后又来了约翰斯·朔伊布做出有趣的观察:如果你把+在第一个羔羊之前,它神奇地开始工作。所以我很好奇:为什么下面的工作呢?int main() {     auto test = +[]{}; // Note the unary operator + before the lambda     test = []{};}两者都编译得很好。GCC4.7+和嘎嘎3.2+。代码标准符合吗?
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

“对于所有类型,它消除了无价值。” +lvalue不是为所有类型定义的,对于一些只是重载函数调用的类型,因此可以生成任何无关类型的值类别,而对于其他情况,则不产生相同的类型。用它来传递价值而不是引用,这将是一种奇怪的使用。最好的办法是static_cast<T>(lvalue)若要从lvalue获取类型T的prvalue,请执行以下操作。“习惯上使用名为val()的泛型函数”:这还不清楚,你能给出一个这样的例子/链接吗?val()功能? 

查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 397 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信