xml*_*lmx 8 c++ language-lawyer auto template-argument-deduction c++20
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);
}
Run Code Online (Sandbox Code Playgroud)
我只是好奇:
是不是和下面这个更简单的一样?
auto decay_copy(auto&& v)
{
return v;
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 16
不是在 2011 年,因为:
auto函数的返回类型推导(这是 C++14 的功能),并且auto&& 函数参数(这是 C++20 的特性),并且但在 C++20 中,是的,这是现在实现decay_copy. auto演绎确实衰减,return v;隐式向前,其他一切都一样。
我想从技术上讲存在一种边缘情况,例如:
struct X {
X();
X(X&);
};
Run Code Online (Sandbox Code Playgroud)
对于 的原始表述decay_copy(X{}),这是格式不正确的(没有可行的构造函数用于X从右值构造 an X)。使用现有 C++20 规则下的新公式,它变得格式良好并调用非常量复制构造函数(因为我们执行此两步重载解析)。
如果采用P2266,那么它们将完全相同,因为return v;总是将其视为v右值,就像现有的公式一样。
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |