爲什麼std::get
對於std::tuple
有這麼多過載(http://en.cppreference.com/w/cpp/utility/tuple/get)?一個對應const
&
和&&
的每種可能的組合?對於每個組合,返回值上的const ref限定符是相同的。爲什麼不只有一個通過轉發引用接受元組類型的重載,然後根據輸入的簽名簡單地轉發返回值?像這樣爲什麼std :: get沒有一個接受轉發參考的簽名
template <int Index, typename TupleType>
decltype(auto) get(TupleType&& tup);
這樣的事情會讓它變得很容易讓人們有理由對get
的功能是什麼,並能避免類似問題2485(https://wg21.cmeerw.net/lwg/issue2485)錯誤
應該指出的是,實現可以自由使用'decltype(auto)'並且只是一次過載。 –
@Yakk這是否意味着在類似的情況下,當返回值可以是右值或基於類型扣減的左值時,使用decltype(auto)會是一個糟糕的設計決定?我是否應該有4個重載? – Curious
@curious你是一個標準委員會文檔接口,但不是數百萬程序員和編譯器作家的實現嗎?如果是,那麼這是一個壞主意。如果不是,那麼我的回答並不包括你的情況,你的情況不夠「相似」。如果你有一個完全不同的問題需要回答,請檢查它是否適合在stackoverflow上發佈,如果是這樣的話,請按「提問」按鈕並寫下來。我不打算在評論主題中列出優點和缺點。 – Yakk