http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3255.html定義decay_copy如下:
template<typename T>
std::decay_t<T> decay_copy(T&& v)
{
return std::forward<T>(v);
}
我只是好奇:
是不是等價于下面更簡單的一個?
auto decay_copy(auto&& v)
{
return v;
}
uj5u.com熱心網友回復:
不是在 2011 年,因為:
- 我們沒有
auto函式的回傳型別推導(這是 C 14 的特性),并且 - 我們沒有
auto&&函式的引數(這是 C 20 的特性),并且 - 右值參考沒有從 return 陳述句中隱式移動(這也是 C 20 的特性)
但是在 C 20 中,是的,這是現在實作decay_copy. auto演繹確實衰減,return v;隱式向前,其他一切都一樣。
我想從技術上講,有一個邊緣情況,例如:
struct X {
X();
X(X&);
};
使用 的原始公式decay_copy(X{}),這是格式錯誤的(沒有用于X從 rvalue構造 an 的可行建構式X)。使用現有 C 20 規則下的新公式,它變得結構良好并呼叫非常量復制建構式(因為我們執行此兩步多載決議)。
如果P2266被采用,雖然,那么他們將是完全等價的,因為return v;會始終把v為右值,完全按照現有的配方一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/337801.html
