gpt4 book ai didi

c++ - 什么是 std::decay 以及何时应该使用它?

转载 作者:IT老高 更新时间:2023-10-28 11:30:13 27 4
gpt4 key购买 nike

std::decay存在的原因是什么? ?std::decay在什么情况下有用吗?

最佳答案

<笑话>显然是用来衰变放射性的std::atomic类型为非放射性的。

N2609是提出 std::decay 的论文.论文解释:

Simply put, decay<T>::type is the identity type-transformation except if T is an array type or a reference to a function type. In those cases the decay<T>::type yields a pointer or a pointer to a function, respectively.

激励的例子是 C++03 std::make_pair :

template <class T1, class T2> 
inline pair<T1,T2> make_pair(T1 x, T2 y)
{
return pair<T1,T2>(x, y);
}

通过值接受其参数以使字符串文字起作用:

std::pair<std::string, int> p = make_pair("foo", 0);

如果它通过引用接受它的参数,那么 T1会被推导出为数组类型,然后构造一个pair<T1, T2>格式不正确。

但显然这会导致显着的低效率。因此需要decay , 应用在按值传递时发生的转换集,让您获得通过引用获取参数的效率,但仍然获得代码处理字符串文字、数组类型、函数所需的类型转换类型等:

template <class T1, class T2> 
inline pair< typename decay<T1>::type, typename decay<T2>::type >
make_pair(T1&& x, T2&& y)
{
return pair< typename decay<T1>::type,
typename decay<T2>::type >(std::forward<T1>(x),
std::forward<T2>(y));
}

注意:这不是实际的 C++11 make_pair实现 - C++11 make_pair还解开 std::reference_wrapper秒。

关于c++ - 什么是 std::decay 以及何时应该使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com