3
使用可變參數模板時遇到了兩種不同的編寫std::forward
調用的方法,但我仍然想知道兩種語法之間的實際區別是什麼?可變參數模板參數包轉發中的語法差異
template<typename... T>
void one(T&&... args)
{
foo(std::forward<T&&...>(args...));
}
template<typename... T>
void two(T&&... args)
{
foo(std::forward<T&&>(args)...);
}
根據我的編譯器,這些都是有效的語法,並且在大多數情況下編譯器不會抱怨。但是我發現了一些情況,其中一個或另一個是正確的,但編譯器沒有詳細說明爲什麼。
另一個更正確嗎?
他們是否有不同的用途?
第一個錯誤,除了一個元素包之外實際上不會編譯。 –
這就是所謂的包裝展開。用'one(2,2.3,2.3f);'調用第一個例子會使函數體foo(std :: forward(2,2.3,2.3f)'不能編譯。 –
DeiDei