亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++ lambda返回類型

C++ lambda返回類型

C++
慕姐3585284 2016-10-23 02:33:02
在最新版的《C++ Primer》中有這么一句話:若lambda的函數體包含單一return語句之外的內容,且未指定返回類型,則返回void。然后我做了如下測試:#include?<iostream> #include?<algorithm> #include?<vector> using?namespace?std; int?main(void)?{ ????vector<int>?vi{?1,?-2,?3,?-4,?5,?-6?}; ????/*lambda表達式返回void?*/ ????/*標準寫法:[](int?i)?->?int?{? ????????????????????????????????????if(i?<?0)?return?-i;? ????????????????????????????????????else?return?i;?}?*/ ????transform(vi.begin(),?vi.end(),?vi.begin(),?[](int?i)?{ ????????????????????????????????????????????????????if?(i?<?0)?return?-i; ????????????????????????????????????????????????????else?return?i;?}); ????for?(int?i?:?vi) ????????cout?<<?i?<<?"?"; ????cout?<<?endl; ????system("pause"); ????return?0; }可不管是在Dev-C++中還是在Visual Studio中,它都能正確編譯并且執行。如果lambda在這里返回void,就應該會編譯錯誤才是啊?這是為什么呢?然后我在Visual Studio上又添加了這樣的一段代碼:auto?f?=?[](int?i)?{ ????????????????????if?(i?<?0)?return?-i; ????????????????????else?return?i;?};在visual assistX的幫助下,鼠標移動到f,它顯示的返回類型也是int。《C++ Primer》寫錯的可能性不大,比較可能的是編譯器的問題。難道是編譯器都不完全遵循C++標準嗎?或者是C++14有什么新規定嗎?為防止翻譯的誤差,我也特地找了原版來看,也是如此的:Lambda with function bodies that contain anything other than a single return statement that do not specify a return type return void.??? via 《C++ Primer》 5th Edition, Page 389.However, if we write the seemingly equivalent program using an if statement, our code won't compile:????//error: can't deduce the return type for the lambda.????transform(vi.begin(), vi.end(), vi.begin(), [](int i) { if(i < 0) return -i; else return i; } );via 《C++ Primer》 5th Edition, Page 396.
查看完整描述

4 回答

?
擁小山

TA貢獻3條經驗 獲得超0個贊

我的primer怎么沒有lambda介紹?不包含c11新增的?

查看完整回答
反對 回復 2016-10-23
  • 慕姐3585284
    慕姐3585284
    這。。??赡苁强绰┝税?。 lambda表達式并不是一個新鮮的功能。
  • 慕姐3585284
    慕姐3585284
    對了,《C++ Primer》和《C++ Primer Plus》是不同的書。 我看的是第一本,對第二本的內容不清楚,莫混淆了。
  • 擁小山
    擁小山
    Plus內容有點多,,,沒敢看哈哈
點擊展開后面1
?
擁小山

TA貢獻3條經驗 獲得超0個贊

return type can't deduce 是因為有兩個return;我這樣理解有錯嗎?

查看完整回答
反對 回復 2016-10-23
  • 慕姐3585284
    慕姐3585284
    嗯,有點問題。 我知道問題的所在了,我在后面添加一個回答。
  • 慕姐3585284
    慕姐3585284
    我寫在了給第一個回答的人的回復中了,就不另添加一個回答了。
  • 擁小山
    擁小山
    好的謝謝樓主!(:
?
擁小山

TA貢獻3條經驗 獲得超0個贊

對于“若lambda的函數體包含單一return語句之外的內容,且未指定返回類型,則返回void。”這句話我的理解是在return語句之外的內容返回類型為空,而不是匿名函數返回空。

查看完整回答
反對 回復 2016-10-23
?
onemoo

TA貢獻883條經驗 獲得超454個贊

另外,想搭車問問題主:你覺得這次的翻譯質量如何?

查看完整回答
反對 回復 2016-10-23
  • 笑著哭自己
    笑著哭自己
    就閱讀來說,我其實還是推薦用原版,對于英語稍差的人來說,讀這本書后,明顯可以感覺自己的英語閱讀,聽力都會得到提升,剛開始讀得確實很慢,但是到后面的速度并不慢。這本專業書的陌生詞匯,就章節來說并不多。對于時間上充足的我們學生,我認為讀原版好。
  • 4 回答
  • 0 關注
  • 3998 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號