6
考慮下面的代碼:爲什麼在跟蹤返回類型中使用了decltype?
template< class T1 , class T2>
auto calc(T1 a , T2 b)
{
return a + b ;
}
template< class T1 , class T2>
auto calc(T1 a , T2 b) -> decltype(a + b)
{
return a + b ;
}
什麼在第二個代碼的區別? 你可以舉一些例子,這有什麼不同或者它在這裏有所作爲?
感謝您從參考維護都是相同的回答雷克斯:) 好了,所以分開。那麼應該使用哪一個或哪一個更安全? –
這取決於你想要什麼。我將使用'auto'和'auto&'來明確返回類型的參考性。有時'decltype'可以有其優點,例如在SFINAE上下文中,你想延遲實例化等[但是這是先進的東西](http://stackoverflow.com/a/24109800/819272)。 – TemplateRex
decltype(auto)有時可能是危險的。例如: decltype(auto)foo(){auto x = 5; return(x); }因爲(x)是一個表達式,所以type是int&(許多人圍繞返回這個圓括號)。所以這個函數返回一個本地引用,這是一個bug! –