簡體   English   中英

在C ++中使用auto聲明lambda變量的首選方法是什么?

[英]What is the preferred way to use auto to declare a lambda variable in C++?

有沒有人了解使用auto聲明lambda變量的各種方式的利弊?
例如:

 auto Val = [] { };           // #1
 const auto &LVRef = [] { };  // #2
 auto &&RVRef = [] { };       // #3

誰能想到一個令人信服的理由,而不是總是喜歡#1?

我想象對於模板函數,聲明可調用參數的首選方法是使用通用引用?

template<class F> void foo(F&& f) { f(); }

還是大多數准則更喜歡將其聲明為非參考參數?

template<class F> void foo(F f) { f(); }

謝謝!

誰能想到一個令人信服的理由,而不是總是喜歡#1?

不。#1更簡單,與其他選項相比,沒有性能損失。

帶有函子的算法通常只按值取值,但是如果您出於某種原因要保證不復制函子,則使用通用引用是合理的。 如果您編寫的只是轉發函子的內容,請使用通用引用。

我實際上會說#2,因為我更喜歡區分非可變和非引用變量/函數,然后聲明所有其他變量const auto& 我更喜歡也使用引用的原因是,您不必關心函數是否返回生成的值或引用。

暫無
暫無

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

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