C++Primer学习笔记《1》



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


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


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


Shortint的最小16bits     long最小32bits 


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


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


可以将算术类型的任何值(无论整型与浮点型,无论正与负或是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类型的字面值就是truefalse这两个值。 


字符串字面值的前面或是后面添加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引用可以绑定不同类型的对象或右值。 


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


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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值