我試圖更好地理解何時衰變或不是一種型別
#include <type_traits>
template <typename T1, typename T2> auto max_test(T1 a, T2 b) -> typename std::decay<decltype(a > b ? a: b)>::type {
return a < b ? a : b;
}
template <typename T1, typename T2> auto max_test_r(T1 a, T2 b) -> decltype(a > b ? a: b) {
return a < b ? a : b;
}
哪個是最正確的版本,為什么?我應該避免使用衰減還是應該何時使用它們?
第二個如果有缺陷,感謝亞當的回答。問題是你正在decltyping一個左值。
uj5u.com熱心網友回復:
如果 a 和 b 是相同的文字型別,則無衰減的將回傳一個懸空參考。
你的衰變沒有。
將會有無數其他不太重要的差異,但這個錯誤非常大。
衰變做特定的事情。當您應該使用它時,要么您希望這些事情發生,要么當您有一個型別需要將 的副本存盤為值時。
uj5u.com熱心網友回復:
哪個是最正確的版本,為什么?
正確的是第二個,沒有,std::decay因為你想回傳相同型別的aor b。這意味著無論是T1或T2。
我應該避免使用
std::decays 還是應該何時使用它們?
這在這篇文章中有更好的解釋:什么是 std::decay 以及何時應該使用?
話雖如此,在 C 17 中,你只需要一些沒有尾隨回傳的東西。
template <typename T1, typename T2>
auto max_test_r(T1 a, T2 b)
{
return a > b ? a : b;
}
您可以使用std::decay,如果你想在實際型別不const-揮發性預選賽。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/326454.html
