设为首页 加入收藏

TOP

C++Primer学习笔记《1》
2015-07-24 06:51:39 来源: 作者: 【 】 浏览:52
Tags:Primer 学习 笔记



Void也是一种类型,常用于返回值为void的函数return处。


C++只是规定了各种基本内置类型的最小存储空间,并没有限制其上限值,对于int,大部分的编译器实现采用的空间都会比要求的大,一般为32bits。但其规定最小空间大小是16bits。


C++中,并没有关于bool类型的最小存储空间限制,bool变量在C++也许是不占用内存空间的,语言层面的实现就是宏定义,定义了两个值,true和false。


Short,int的最小16bits; long最小32bits


Float类型只能表示6位有效数字,运算中会产生丢失精度的情况,不适合浮点运算。Double能表示10位有效数字,适合浮点运算,关键是double的运算成本基本和float的扯平,多出的部分可以忽略不计。


一般的编译器实现中,short占半个字长(一台32位的机器,其字长是4个字节,也就是一个字),int一个字长,long一个或两个字长(在32位机器中,通常情况下long和int都是一个字长)。


可以将算术类型的任何值(无论整型与浮点型,无论正与负或是0,都可以)赋给bool类型的变量,原则是0值代表false,其余的非0值均为true。


整型是有无符号和有符号之分的,关键字是unsigned。


在C++中将负数赋给无符号整数是合法的,但变量中存储的值是被取模后的值。


浮点数是区别于整型为代表的定点数得名的,点就是实数中的小数点。一般情况下float采用一个字(32bits),double采用两个字(64bits),long double采用三个或是四个字(96bits或是128bits)。类型的取值范围决定了浮点数能表示的有效数字位数。


整型运算中,long类型虽然精度高于int,但其增加的运算成本却是不可忽略的,成本大大增加。


字面值常量,称之为字面值是因为只能用它的值来称呼它,常量是因为它不能被修改。每一个字面值都有对应的类型,但其统统为常量。只有基本内置类型有字面值常量,类类型没有字面值常量。


以0(零)开头的字面值表示8进制数,以0x或是0X开头的字面值表示16进制的数。整型字面值的默认类型是int或是long,如果值的大小在int表示范围内就是int;如果超出了int那就是long。


字面值后面加u或是U可以将字面值变成无符号。同理加上l或是L可变成长类型。


默认的浮点型字面值是double,除非显示的在浮点数后面加上f或是F明确指出浮点类型是float。


Bool类型的字面值就是true和false这两个值。


字符串字面值的前面或是后面添加l或是L均可变成宽字符。


将字符串字面值和宽字符串字面值连接,将会出现未定义行为。


多行字符串字面值需要用反斜杠来分行,“\”,但必须保证该反斜杠是本行的最后一个字符了,后面不允许注释和空格,后继行的任何字符都被视为字符串成分,所以后继行没有正常的缩进。(这一点类似于用宏定义表示一个跨多行的函数)


左值和右值,简单来讲就是可以作为赋值运算符(等号“=”)的左边的是左值,在右边的是右值。左值的深层次是具有内存空间的变量,例如i++不是左值,++i就是左值。


初始化分为直接初始化和赋值初始化两种,int value = 11;这就是学习初期经常用的复制初始化。其直接初始化表示int value(11);内置类型的这两种情况基本不差别,但对于类类型的对象来说,这两者就是有着很大的差别。对于对象的初始化细节等详见csdn博客。


声明和定义的区别详见csdn博客。定义变量的实质是开辟空间,在一个程序中,一个变量只能有且仅有一个定义。声明通过extern关键字声明变量而不定义,在一个程序中,一个变量的声明可以有多次。

Extern int value;是标准的声明式。但extern int value = 11;这就是定义了。


变量的作用域:全局作用域,类作用域,名空间作用域,局部作用域,块作用域,括号作用域。


全局作用域下的变量默认为extern,可被外部文件访问的。加上const后就强制成本文件的局部变量,不可被外部文件访问,这也就是为什么头文件内可以定义const全局变量。要想让其成为全局,需要extern。


头文件中一般不用于定义,三个例外,类定义,inline函数,const变量。


引用是一种复合类型,所谓复合类型就是指本类型的定义需要用到其他的类型,不能定义引用类型的引用,但可以定义任何其他类型的引用(数组本身可以有引用,但其元素类型不能为引用,因为无法初始化)。

Int &value = 11;是错误的;但const int &value = 11;这就可以。


Double dval = 3.14; const int &ri =dval;这种跨类型的引用是可以的。编译器在实现过程中做了一次类型转换,中间多出了int tempint = dval; const int &ri = tempint;

总结:非const引用只能绑定同类型的对象,const引用可以绑定不同类型的对象或右值。


每一个定义的枚举都是一种类型,枚举被看做是编译器常量,枚举成员的值可以不唯一。


字符串字面值的常量折叠原则:将同一个字符串字面值赋给多个变量,这些变量会有同一个地址,在实践中const和define一个效果,不会有任何存储空间用于存储const变量。


??
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVa 11865 Stream My Contest 二.. 下一篇NYOJ---蛇形填数(方块填数+三角填..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: