概述
-
数组和函数推导
-
说明
- 非引用类型,推导成指针。
- 引用类型,推导成数组加长度。
-
注意
- 数组获取长度是有意义的,不过建议新型数组.
-
-
数组
-
说明
- 推导出来长度.
- 数组和指针,是两个概念,虽然又通用。
- 数组是长度固定的数组类型, 指针是可以为任意类型任意值的类型.
- 内部也不方便计算.
-
案例一
template<typename T> void show(T& a) { // error code a.nice(); } int main() { show("abcsd"); }
const char [5]
类型.- 这里是引用.
-
案例二
template<typename T> void show(T a) { // error code a.nice(); } int main() { show("abcsd"); }
const char*
普通类型.值传递的规则.
-
小结
- 上面是同样的参数但是不同的类型.
- 因为无法声明为任意长度数组类型,可以用引用的方式获取具体类型.
-
问题
- 固定长度了,但是无法变长,变长了之后就又是指针才支持.
- 后来
C++11
推出了一个新的STL
,即Array
类型.
-
案例三获取数组长度
template<typename T,int N> void show(T (&a)[N]) { // error code a.nice(); } int main() { show("abcsd"); }
T
是基本类型,&a
表示引用的方式,N
表示数组长度。- 多一个类型多一份代码.
- 所以建议用
array
而不是这种。
-
长度信息
- 长度信息是可以在程序编译阶段就可以知道的.
- 所以可以用下面的机制获取长度.
template<typename T,int N> int show(T (&a)[N]) { // error code a.nice(); } int main() { show("abcsd"); }
-
改良
- 用于数组.
template<typename T,int N> constexpr int show(T (&a)[N]) { return N; } int main() { char s[show("abcsd")]; }
const
是需要直接复制的.constexpr
可以在编译阶段简单计算.
-
-
函数
-
说明
- 函数指针和函数引用没有太大的差别.
-
简单案例
template<typename T> void show(T&a) { // error code a.error(); } int main() { show(main); }
- 引用传递.
T = int (void)
,函数类型,不能修改.
-
值传递
template<typename T> void show(T a) { // error code a.error(); } int main() { show(main); }
T=int (__cdecl *)(void)
- 即指针类型.
-
-
总结
-
可以用模板在编译阶段获取数组类型和对应长度.
-
最后
以上就是欢呼手套为你收集整理的模板推导数组函数,获取数组长度数组和函数推导数组函数总结的全部内容,希望文章能够帮你解决模板推导数组函数,获取数组长度数组和函数推导数组函数总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复