C++学习笔记---基本类型

首先说明一下:我写这些只是为了梳理自己不足地方,有很多东西都不会提及,因为我觉得那些基础都早已融入骨髓之中。

C++基本内置类型:

   首先说明一下内置的含义:内置就是C++语言预定义的类型,比起自定义的结构类型来说,内置类型的执行速度远远高于后者。这也是在算法中为什么一直强调用STL模板算法函数的原因。

   Char:

   Char类型分为unsigned char和char范围是(0~255)。试想把一个366的值存储到8位的unsigned char中会出现什么现象?实际赋值是80,因为80是336对256求模后的值。

   C++中把负值赋值给unsigned对象是完全合法的,其结果是负数对该类型的取值个数求模后的值,如果把-1赋值给8位的unsigned char,那么结果是255,因为255是-1 对256求模以后的结果。

    注:为了兼容C语言,C++中所有的字符串字面值都有编译器自动在末尾添加一个空字符。具体的可以用(size和length测试)

 

C++初始化:

   C++支持两种初始化变量的形式:复制初始化和直接初始化。

   int ival(1024);//直接初始化

   int val=1024;//复制初始化

   效率上来说:直接初始化的效率比复制初始化的效率要高,顾名思义:复制初始化是要先定义临时变量然后赋值的。更详细的区别请参考这里:http://blog.sina.com.cn/s/blog_6024e93d0100dq28.html?retcode=0

 

类型的和变量的初始化:

请记住:1.永远不要依赖于未定义的变量.变量未初始化会造成不可预料的错误
通常编译器会提示这种错误,
比如:
DWORD coun;(局部变量,占栈区空间)//堆栈的概念请看下面
cout<<coun<<endl;    //warning C4700: 使用了未初始化的局部变量“coun”
你断点追踪会发现coun是一个很大的负值。执行以后会异常。(我用的编译工具是VS2005,其他的编译工具,可能不提示这种警告,但是我没测试过。)
我再重申,谭浩强《c++程序设计》中观点:
如果是定义的全局变量或者静态变量,未初始化的话就是0.如果是局部变量,那就是以前残留在堆栈里的随机值。

 

但是 有时这种错误简直就是灾难性的,编译器既不会报错也不会提示警告。这种错误非常的隐蔽。
建议:每个内置对象都要初始化,虽然这样做并不是总是必须的,但是这样做会更安全。
再来看一个未初始的例子:
string name;(局部变量)
cout<<name<<endl;
你觉得会报错吗?很多人都会说报错,但是事实上并不会报错也不会提示警告。原因就是
string是类,而不是内置类型对象。类有一个默认的构造函数。上面初始化的时候调用的是默认构造函数。因此会默认的赋值为空。  

 

 

const:

我在以前的时候总结过,有兴趣的可以去看一看;http://hi.baidu.com/wangguang246/blog/item/cf680cfb3e27ba839f514601.html
现在说一下如何在类中添加const变量。
const 必须初始化。所以在类中构造函数比如用直接初始化才可以。
如果有不明白的话,请参考这里:http://roofalison.zhmy.com/archives/2007/134254.html

 


附录:
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
更详细的请翻阅这里:http://zhidao.baidu.com/question/22143580.html?fr=ala0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值