[原创] 关于类型匹配!!!
一直想写,但是又不想动......今天下定决心,一边吃饭一边写... 其实要写的东西还是有的,比如继承下的作用域,构造函数,析构这些......今天主要写下自己复习的东西--类型匹配(翻了一些书),有错的地方望大家指出并更正..个人认为,关于类型匹配并没有太多,主要有三种情况:
1) 常规的类型匹配
#include<iostream>
using namespace std;
int main(){
int a=2;
int b=a; //int 匹配 int 这是毫无疑问的. 同样内建的类型都是这样匹配.
/*---加上指针------*/
int *p=&a; //情况和上述一样,匹配它所指的类型..
return 0;
}
2) 对于数组的匹配..我自己叫退化匹配(方便理解)
关于数组退化,就是数组名在初始化别的变量是会自动退化成指针...
#include<iostream>
using namespace std;
int main(){
int a[5]; //实际是int *a
int *w=a; //没问题
/*-----一维数组的情况很简单,但是要注意的是退化后数组就失去边界了...----------*/
/*------对于二维数组,在数组退化时只有第一维退化(好像没这种第一维的说法,此处为了便于理解),第二维任保持大小,至于原因可以自己去思考一下,给个提示:二维数组在内存中也是线性排列....------*/
int b[5][10]; //实际是 int (*)[10]; (1)
int* p= b[0]; /*这里第一维退化成(1)的那种类型,然后去内容后(把b[0]看成整体s)变成 int s[10],类比于int* s,于是匹配.*/
return 0;
}
3) 指针方面的类型匹配
#include<iostream>
using namespace std;
int main()
{
int* p;
int* s=p; //没问题,同类型匹配
const int* w=p; //没问题,因为加上const,并不会影响p,反而保护了p
int* a= w; //错误,因为这样做破坏了w的const性
/*-----复杂一点的-----*/
int * a_[20]; //实际是int * *a_
int ** q= a_; //没问题
const int* *w_=a_; //错误,因为w_指向的是const int* ,而a_指向是int*,类型不匹配
int * const * _w_=a_; /*没问题,因为_w_指向的是int* const,而a_指向是int*,那类型怎么匹配呢?这里就是一些专家所推荐的写法问题,先看这个: const int x 也是 int const x .. 好,但是在上面的指针情况下,就体现了专家推荐的第二种写法..
我先把int* 看成整体s, 那int* const 就是 s const, 我们前面说了,const 性的指向非const 的不会带来问题..而const int* 就是int const * ,而不是 int * const,所以是不会匹配的!!!*/
return 0;
}
好了,就写这么多,吃饭了.........