-
数组和函数推导
-
数组
-
说明
- 推导出来长度.
- 数组和指针,是两个概念,虽然又通用。
- 数组是长度固定的数组类型, 指针是可以为任意类型任意值的类型.
- 内部也不方便计算.
-
案例一
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
可以在编译阶段简单计算.
-
-
函数
-
总结