-
数组和函数推导
-
数组
-
说明
- 推导出来长度.
- 数组和指针,是两个概念,虽然又通用。
- 数组是长度固定的数组类型, 指针是可以为任意类型任意值的类型.
- 内部也不方便计算.
-
案例一
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可以在编译阶段简单计算.
-
-
函数
-
总结
模板推导数组函数,获取数组长度
最新推荐文章于 2022-11-12 12:16:18 发布
本文探讨了C++中的模板在处理数组和函数时的推导规则,强调了非引用类型推导为指针,引用类型推导为数组加长度的概念。介绍了C++11引入的Array类型来更好地处理数组长度信息。同时,文章通过案例分析了函数指针和引用的差异,并展示了如何在编译阶段获取数组长度。最后,提出了使用constexpr关键字进行编译时计算的优化方法。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Stable-Diffusion-3.5
图片生成
Stable-Diffusion
Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率
1520

被折叠的 条评论
为什么被折叠?



