任何一个变成语言,都会有build-in type(内置数据类型),C++是从C语言发展过来的,从而对硬件的支撑还是比较好的。先说一点工作中的经验(copy来的,先记着)。
1、经验之谈
- 我们经常使用整形进行计数,使用unsigned 类型比较明智(在比较过程中,有符号的负数大于无符号数据类型);
- 在执行整形算数运算时,比较少使用short类型,否则可能会造成越界的错误;
- 对于char类型,我们常用来存储字符;
- 大多数机器上,使用int类型进行整形计算不易出错,并且比long预算代价更低;
- 对于浮点数类型呢,主要使用double类型,有10个有效值(float只有6个有效值);
- 变量一般都要进行初始化,这个可是bug的一个主要来源;
2、对象的初始化
int a (10); //直接初始化
int b = 1024; //复制初始化
抠字面的意思确实不怎么好,初始化不是赋值-->两者主要的区别就是,初始化时创建了一个变量并且给他赋予一个初值,而赋值是擦出当前对象并用新值代替(说了这么多,其实就是有没有新创建对象,囧!!)。最近在看《C++语言的设计与演化》中总是提到“C++是一种静态类型语句”,当时确实不知道是什么意思,现在看了《C++Primer》终于知道了大概意思,所谓的静态类型语言,就是在编译时会作类型检查。
3、声明和定义
int i; //声明和定义变量 extern double pi = 3.14159; extern int i;// 声明变来那个,指明类型和变量名
从上面我们看出,声明和定义的关键区别就是是由从内存中新拿来一块内存,来表示变量。变量的定义只能又一次,而声明则可以有很多次。还有一个要说的就是extern关键字不仅仅是声明哦,还有可能是定义一个变量。
4、关于const的一点总结
const在C/C++中都是修饰一个对象,声明这个对象的值不应该有所改变(我们不能对其进行赋值操作),这里说的对象很多,可以使C/C++的内置数据类型的对象,也可以是我们自定义的类和结构体对象,也可以是指针,引用等等,这里面可能经常要我们进行区分的是const修饰指针所带来的困扰。
int i = 8; const int ic = i; //int a[ic]; const int *pic = //int *const cpi = const int *const cpic = i = ic; pic = cpic; pic = cpic = //cpi = pic; ic = *cpic;
上面的一小段代码演示了const修饰指针,我们在工作和学习当中应该遇到过这种情况很多次了,上面const修饰指针的三种方式,指向常对象的指针,指向对象的常指针,指向常对象的常指针。我们只要记住一个简单的规则就很好区分上述的三个情况了,“看const离什么最近,它就修饰的什么东西”,比如const int *pic = &ic中,const离*pic最近, 那么const修饰的就是pic指向的对象为常对象,同理int *const cpi = NULL中const离cpi最近,那么就表明cpi为一个指向int对象的常指针。
PS:我在这犯错了,常对象要求的是在定义的时候对其进行初始化,而不要求一定要是常量/常量表达式。大家应该看到我后面定义了一个int a[ic]编译的时候会出错,主要是因为这个时候还不知道ic的值,我们不能够定义一个未知大小的数组。
后记
对于基本数据类型,现在才复习了一点,后面继续更新!