谈谈对于C++函数指针和模板的理解

本文想讲解一下如下几个比较容易混淆的概念,希望让其好理解。

1、指针函数、函数指针

2、指针数组、数组指针

3、函数模板、模板函数

4、类模板、模板类

5、指针常量、常量指针。

首先我们先讲解第1和第2两个概念,这两个概念是可以放到一起去考虑的。指针函数和指针数组的这个概念比较简单,其实就是返回值和数组里面的内容是指针,这个概念不容易混淆。记住它们的声明方式都是char *就行,也可以理解成(char *),因为这本来就是一个类型。遗留的问题是目前好像指针函数这种使用方式确实比较少,工作中没怎么使用过。

再来说说函数指针和数组指针,这个两个从字面上的意思是都是一种类型的指针。只不过我们比较常见的指针是指向变量的,它的样子是char *a = c; 简化一下就是 *a = c; 指向一个函数的或者是一个数组的不怎么常见。比如一个函数,最简单的声明是 char fun(char a, char b); 类比刚刚说的变量的指针,肯定是(*p_fun) = fun,所以完全的函数指针应该是 char (*p_fun)(char a, char b) = fun。再简化一下就是char (*p_fun)(char ,char)这样一个函数指针就写出来了。类比数组指针也是这个思维方式。另外我们使用函数指针一般的方式都是在前面加上一个typedef。这样基本就可以直接使用使用了,就想这样 typedef char (*p_fun)(char a, char b); p_fun = fun;

下面说说3和4两个概念,这两个也是后面C++相当于C之后一个很大的改进。在后面面向多态中使用了很多,也可以有很多的扩展。其实简单的理解就是,也是一个类型。但是这个类型是什么我先不说,等到后面使用的时候再说。这个底层的实现机制是可以探究一下的,有利于理解C++的实现逻辑。估计就是哈java的反射机制有点像的那种。我这边理解为,写下了template之后,就是“大家都闪开,我要开始装B了”。然后再写typename,告诉大家“template就是这么装B的”。

最后说说第5个的概念,这两个概念其实中文不好理解。以char *a为例子,我认为可以这么理解const在*的后面,那么const只修饰变量,所以变a的值不能变。但是*a的值可以变。如果const在*的前面,那么*a的值不能变,a可以变。

这些知识点都是比较浅显的一些知识点,是我自己的一些理解,如果有不对的地方,欢迎指正。

好了,今天就到这里吧。

发布了16 篇原创文章 · 获赞 2 · 访问量 2378

猜你喜欢

转载自blog.csdn.net/u011553313/article/details/104257995
今日推荐