c – std :: decay和std :: remove_reference之间的区别

前端之家收集整理的这篇文章主要介绍了c – std :: decay和std :: remove_reference之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当在C中进行模板元编程时,我经常会碰到以下内容
template <typename T>
S<T> make_wrapper(T&& t) { return S<T>(std::forward<T>(t)); }

我知道我应该在返回类型中使用类似std :: decay的东西,但是为什么std :: remove_reference也不会工作呢?这有什么区别?那么std :: remove_cvref怎么样?

解决方法

删除引用会留下const和volatile.如果这是你想要的,那就足够了.

删除cvref会执行大部分衰减,但不会将函数类型和数组类型转换为指针.

decay以一种方式转换类型,您可以将其副本合理地存储在数组或结构中,或者将其返回或传递给函数.

猜你在找的C&C++相关文章