簡體   English   中英

將 std::forward 用於未進一步傳遞給函數的通用引用是否有意義?

[英]Does it make sense to use std::forward to a universal reference which is not passed further ahead to a function?

我對 std::forward 與特定用例的使用有點困惑。 讓我們假設以下情況:

template <typename Store, typename... Args>
auto get(Store&& store, Args&&... args)
{
    return store.get(std::forward<Args>(args)...) // 1
    return std::forward<Store>(store).get(std::forward<Args>(args)...) // 2
}

//1 或 //2 return 語句中哪一個是正確的? 它取決於get方法嗎? (主要關心的是,如果我要轉發的store ,即使我沒有通過它遠一點調用鏈)。

如果store是一個右值引用,那么你的調用者就是在暗示你可以自由地使用它的狀態。

當您轉發時,您有條件地對成員函數get做出相同的承諾。 那個承諾在這里合適嗎? 我覺得是這樣的。

在實踐中,右值重載 get 可以明智而有效地從對象中提取一些數據,或者跳過一些簿記清理,以生成其返回值。

這種技術的一個例子是 std optional 上的 value 方法。

暫無
暫無

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

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