gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:13:01 24 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/42384302/

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