关于C++中数据基础数据类型的一个杂记
2013-07-16 22:52
483 查看
任何一个变成语言,都会有build-in type(内置数据类型),C++是从C语言发展过来的,从而对硬件的支撑还是比较好的。先说一点工作中的经验(copy来的,先记着)。
在执行整形算数运算时,比较少使用short类型,否则可能会造成越界的错误;
对于char类型,我们常用来存储字符;
大多数机器上,使用int类型进行整形计算不易出错,并且比long预算代价更低;
对于浮点数类型呢,主要使用double类型,有10个有效值(float只有6个有效值);
变量一般都要进行初始化,这个可是bug的一个主要来源;
从上面我们看出,声明和定义的关键区别就是是由从内存中新拿来一块内存,来表示变量。变量的定义只能又一次,而声明则可以有很多次。还有一个要说的就是extern关键字不仅仅是声明哦,还有可能是定义一个变量。
上面的一小段代码演示了const修饰指针,我们在工作和学习当中应该遇到过这种情况很多次了,上面const修饰指针的三种方式,指向常对象的指针,指向对象的常指针,指向常对象的常指针。我们只要记住一个简单的规则就很好区分上述的三个情况了,“看const离什么最近,它就修饰的什么东西”,比如const
int *pic = &ic中,const离*pic最近, 那么const修饰的就是pic指向的对象为常对象,同理int *const cpi = NULL中const离cpi最近,那么就表明cpi为一个指向int对象的常指针。
PS:我在这犯错了,常对象要求的是在定义的时候对其进行初始化,而不要求一定要是常量/常量表达式。大家应该看到我后面定义了一个int a[ic]编译的时候会出错,主要是因为这个时候还不知道ic的值,我们不能够定义一个未知大小的数组。
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的值,我们不能够定义一个未知大小的数组。
后记
对于基本数据类型,现在才复习了一点,后面继续更新!相关文章推荐
- 一个关于c/c++语言内存数据类型的实验
- 关于java基础--基本数据类型封装以及String类方法讲解
- java基础改学C++(一)数据类型与表达式
- Xman整理篇___关于Python的基础内容(变量和简单数据类型)
- 学习笔记(C++中基础数据类型在内存的表现形式)
- 关于linux下C++中利用socket时的数据类型转换错误
- C++各基础数据类型长度以及范围(总结)
- 关于C++数据类型转换和格式化输出的问题
- c++基础数据类型字节数
- C++ STL 有关于SET集合的基本操作,本文不包含涉及到自定义数据类型的排序
- C++输出某个数据的类型:关于typeid(a).name()的用法
- 数据类型—C++基础篇
- 关于C和C++中的基本数据类型int、long、long long、float、double、char、string的大小及表示范围
- 关于C/C++中静态本地变量的使用与数据类型修饰符const
- 关于MySQL的TinyInt数据类型在Delphi中作为Boolean类型的一个要注意的问题
- 【c++基础】2.数据类型、类型转换、变量
- c++中的数据类型 运算符 和 表达式[c++ 基础(一)]
- C++中sprintf实现将一个基本数据类型的数组转换成字符串
- 【js基础】javascript中关于数据类型一些知识和类型判断
- C++学习笔记之数据类型杂记