簡體   English   中英

功能和非捕獲lambda之間的區別

[英]Difference between function and non-capturing lambda

之間的確切區別是什么?

auto foo(int i) -> int {
  return i + 1;
}

static constexpr auto bar = +[](int i) -> int {
  return i + 1;
};

在鏈接,性能和用法方面? 我很好奇lambda是否會像正常聲明的函數一樣工作。

鏈接: foo是一個函數,具有外部鏈接。 bar是一個變量,其類型為int (*const)(int) ,並且具有內部鏈接。 我看不到任何后果,在這里應該提到這是一個重要的區別。

性能:在發布版本中,兩者都可以內聯,因此沒有區別。 在調試版本中, bar的運行速度較慢:編譯器會生成更多的匯編代碼,並為bar生成兩個(而不是一個) call指令( 實時演示 )。

用法:可以使用相同的語法( foo(1)bar(1) )調用兩者,因此沒有區別。

如果lambda不能捕獲任何內容,則其行為類似於普通函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM