[英]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.