博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
std::decay
阅读量:5253 次
发布时间:2019-06-14

本文共 2745 字,大约阅读时间需要 9 分钟。

参考资料


• cplusplus.com

• cppreference.com

std::decay简介


• 类模板声明

// cplusplus.comtemplate 
struct decay; // MS C++ 2013 template
struct decay { // determines decayed version of _Ty     ... }; // GCC 4.8.2 template
class decay {
... };
 

• 类模板说明

       为类型T应用从左值到右值(lvalue-to-rvalue)数组到指针(array-to-pointer)函数到指针(function-to-pointer)的隐式转换。转换将移除类型T的cv限定符(const和volatile限定符),并定义结果类型为成员decay<T>::type的类型。这种转换很类似于当函数的所有参数按值传递时发生转换。

        如果类型T是一个函数类型,那么从函数到指针的类型转换将被应用,并且T的衰变类型等同于:

                  add_pointer<T>::type

        如果类型T是一个数组类型,那么从数组到指针的类型转换将被应用,并且T的衰变类型等同于:

                  add_pointer<remove_extent<remove_reference<T>::type>::type>::type

        当左值到右值转换被应用时,T的衰变类型等同于:

                  remove_cv<remove_reference<T>::type>::type

• 模板参数说明

       T : 某种类型。当T是引用类型,decay<T>::type返回T引用的元素类型;当T是非引用类型,decay<T>::type返回T的类型。

std::decay详解


• 基本类型

#include 
#include
using namespace std;typedef decay
::type A; // A is inttypedef decay
::type B; // B is inttypedef decay
::type C; // C is inttypedef decay
::type D; // D is inttypedef decay
::type E; // E is int *typedef decay
::type F; // F is int(*)(int)int main() { cout << boolalpha; cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // false cout << is_same
::value << endl; // true return 1;}

• 非基本类型

#include 
#include
using namespace std;class MyClass {};typedef decay
::type A; // A is MyClasstypedef decay
::type B; // B is MyClasstypedef decay
::type C; // C is MyClasstypedef decay
::type D; // D is MyClasstypedef decay
::type E; // E is MyClass *typedef decay
::type F; // E is MyClass *typedef decay
::type G; // G is MyClass **typedef decay
::type H; // H is MyClass **int main() { cout << boolalpha; cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true cout << is_same
::value << endl; // true return 1;}

 

转载于:https://www.cnblogs.com/heartchord/p/5039894.html

你可能感兴趣的文章
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
熟用TableView
查看>>
Java大数——a^b + b^a
查看>>
poj 3164 最小树形图(朱刘算法)
查看>>
服务器内存泄露 , 重启后恢复问题解决方案
查看>>
android一些细节问题
查看>>
KDESVN中commit时出现containing working copy admin area is missing错误提示
查看>>
利用AOP写2PC框架(二)
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>
ef codefirst VS里修改数据表结构后更新到数据库
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>