一 定义

  • 头文件 <type_traits>
template< class T >
struct decay; (since C++11)
  • 辅助类型
template< class T >
using decay_t = typename decay<T>::type; (since C++14)

二 作用

  • 退化类型的修饰。
  • 为类型T应用从左值到右值(lvalue-to-rvalue)、数组到指针(array-to-pointer)和函数到指针(function-to-pointer)的隐式转换。转换将移除类型T的cv限定符(const和volatile),并定义结果类型为 decay< T >::type。这种转换很类似于函数参数按值传递时发生的转换。有以下几种情况:
    • 若 T 为“ U 的数组”或“到 U 的数组的引用”类型,则 decay< T >::type 为 U* 。
    • 若 T 为函数类型 F 或到它的引用,则 decay< T >::type 为 std::add_pointer< F >::type 。
    • 否则,decay< T >::type 为 std::remove_cv<std::remove_reference< T >::type>::type。

三 例子

#include <iostream>
#include <type_traits>template <typename T, typename U>
struct decay_equiv : std::is_same<typename std::decay<T>::type, U>::type
{};int main()
{std::cout << std::boolalpha<< decay_equiv<int, int>::value << '\n'    // 情况3<< decay_equiv<int&, int>::value << '\n'  // 情况3<< decay_equiv<int&&, int>::value << '\n'  // 情况3<< decay_equiv<const int&, int>::value << '\n'  // 情况3<< decay_equiv<int[2], int*>::value << '\n' // 情况1<< decay_equiv<int(int), int(*)(int)>::value << '\n'; // 情况2
}
  • 结果
true
true
true
true
true
true

四 参考

  • cppreference-decay

C++11 decay相关推荐

  1. 2.2.6 学习率衰减

    学习率衰减 加快神经网络的另一个办法就是随着时间推移慢慢减少学习率.我们将这个称之为学习率衰减. 如图中蓝色线所示,当mini-batch不大的时候,噪声会比较明显.最后不会精确地收敛,而是在最小值附 ...

  2. 深入tensorflow1.x

    文章目录 一.tensorflow 安装 二.核心概念 2.1 计算图 2.2 Tensor 2.3 会话Session 2.4 两层神经网络 三.深层神经网络 1. 优化方法 2. 指数衰减的学习率 ...

  3. C++(11):通过is_same检查类型,decay退化类型

    C++11的标准库引入了is_same<T1, T2>函数,可以通过其成员value检查类型T1与T2是否相同: #include <iostream> using names ...

  4. C++11中头文件type_traits介绍

    C++11中的头文件type_traits定义了一系列模板类,在编译期获得某一参数.某一变量.某一个类等等类型信息,主要做静态检查. 此头文件包含三部分: (1).Helper类:帮助创建编译时常量的 ...

  5. C++11多线程中std::call_once的使用

    C++11中的std::call_once函数位于<mutex>头文件中. 在多线程编程中,有时某个任务只需要执行一次,此时可以用C++11中的std::call_once函数配合std: ...

  6. 概率论中指数分布介绍及C++11中std::exponential_distribution的使用

    指数分布:在深度学习中,我们经常会需要一个在x=0点处取得边界点(sharp point)的分布.为了实现这一目的,我们可以使用指数分布(exponential distribution): p(x; ...

  7. (原创)用c++11打造好用的any

    上一篇博文用c++11实现了variant,有童鞋说何不把any也实现一把,我正有此意,它的兄弟variant已经实现了,any也顺便打包实现了吧.其实boost.any已经挺好了,就是转换异常时,看 ...

  8. GitHub服务中断24小时11分钟事故分析报告\n

    上周,GitHub经历了一次事故,导致服务降级24小时11分钟.虽然平台的某些部分不受事故影响,但仍然有多个内部系统受到了影响,向用户显示了过时且不一致的内容.所幸没有用户数据丢失,但针对几秒钟数据库 ...

  9. C++11模版元编程的应用

    1.概述 关于C++11模板元的基本用法和常用技巧,我在程序员2015年2月B<C++11模版元编程>一文(后称前文)中已经做了详细地介绍,那么C++11模版元编程用来解决什么实际问题呢, ...

  10. Multi-thread--C++11多线程中std::call_once的使用

    C++11中的std::call_once函数位于<mutex>头文件中. 在多线程编程中,有时某个任务只需要执行一次,此时可以用C++11中的std::call_once函数配合std: ...

最新文章

  1. linux杀死tomcat进程6,Linux下启动停止查看杀死Tomcat进程(示例代码)
  2. 查看磁盤使用情况linux,在Linux系统下安装Filelight来查看磁盘使用情况
  3. python全栈 互联网协议
  4. 【Paper】41_[24]novel type of phase transition in a system of self-driven particles
  5. React从入门到精通系列之(12)深入理解JSX
  6. 编程的一些快捷键(转帖)
  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1093:计算多项式的值
  8. 虚拟机和Linux系统的安装
  9. 操作系统上机作业--多线程排序
  10. JS——构造函数、原型与实例之间的关系 及 原型链 的描述
  11. Leetcode91. Decode Ways
  12. 通过pip下载的包默认位置在哪
  13. Windows免费录屏软件——captura
  14. google drive加速下载
  15. 济南ITSS证书办理大全
  16. Paypal与Moneybookers的比较
  17. 我的世界服务器无限漏斗,我的世界漏斗bug 我的世界怎么刷东西
  18. 51单片机——交通灯
  19. linux(ubuntu 14.04 lubuntu14.04)下 搜狗拼音法安装后无法运行的解决方法
  20. matlab卷积和互相关,互相关与卷积

热门文章

  1. np.delete详解
  2. java雪崩_java-雪崩效应及解决办法
  3. docker安装dejavu
  4. Mark- 新的开始
  5. 新浪微博分享链接+图片
  6. Verilog——7段数码管译码器
  7. Unity3d用脚本实现Button图片的更改
  8. The Little Schemer Fourth Edition,笔记01
  9. c语言指针选择题库及答案,C语言指针练习习题及答案.doc
  10. APM, EAM, AIP都是什么鬼?