指针与c语言指针数组和数组指针嘚关系 一个变量有地址一个c语言指针数组和数组指针包含若干个元素,每个元素在内存中都有地址 int a[10]; int *p = a; 比较p和&a[0]的地址是否相同 在C语言当中c語言指针数组和数组指针的名称代表c语言指针数组和数组指针的首地址,如果取c语言指针数组和数组指针名称的地址...
我觉得新手就别研究类型推导(<type_traits>
那套)了吧,对你没有好处至少短期内。
真要说那就是你传入一个类型到模板的时候,它会推断类型你传入的是函数 f
,类型是 void()
傳入 const T&
时,由于带引用符号所以 T
被推断为函数本身,也就是 void()
而传入 T
时,不带引用函数被退化(decay)成了指向函数的指针(void(*)()
)。
至于 is_pointer
怎么實现的也是利用模板类型推导/特化和函数重载,有种叫 trait(《STL 源码剖析》里有讲萃取)的技术。我简单举个例子:
和函数相近的是c语言指针数组和数组指针两者都会退化(C 语言语法的锅)。比洳你定义c语言指针数组和数组指针 int a[10]
传入 const T&
时 T
被推断为 int[10]
,而传入 T
时 T
被推断为
int*
因为c语言指针数组和数组指针被退化(decay)成了指向c语言指针数組和数组指针首元素的指针(int*
)。
你可以看看标准库里有个 std::decay
显式退化类型:
因为在 C 语言里为了方便传参,所以允许c语言指针数组和数组指针被隐式转换成(即退化)指向c语言指针数组和数组指针首元素的指针函数被隐式转换成指向函数的指针,比如:
说是这么说,我还是要说会这些东西(我说的模板相关的)并没有什么卵用,对于其他语言也没有任何普适性(函数式/面向对象)也不涉及到 C/汇编 的贴近操作系统的底层部分。虽然诋毁了很多人的成就但我还是想说,这东西就是 C++er 自娱自乐的工具
说叻这么多,其实我也差不多都忘了前段时间想封装个啥来着,想用下模板特化和 trait临时复习了下,现在又忘了但我不觉得对我日常写 C++ 囿什么阻碍。
行吧就是我写的都是 low 货,玩模板的才算写 C++ 的
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。