【C++ Primer学习笔记】第2章 变量和基本类型

来源:互联网 发布:usb3.0传输数据速度 编辑:程序博客网 时间:2024/06/05 10:35

1、基本内置类型

整型:整数、字符、布尔值

浮点型:浮点数

 

2C++的内置类型与其在计算机的存储器中的表示方法密切相关。让存储具有结构的最基本方法是用块(Chunk)处理存储。块的大小因机器不同而不同,但是通常将8位的块作为一个字节,32位或4个字节作为一个“字”(word)。

 

3、带符号类型和无符号类型(整型独有)

整型 int, short, long都默认为带符号型,而无符号必须加上说明符 unsigned

和其他整型不同,char有三种不同的类型:普通char, unsigned char, signed char。虽然char有三种不同的类型,但只有两种表示方式。可以使用unsigned char signed char表示char类型。而使用哪种char表示方式由编译器而定。

 

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

 

4、对于实际的程序来说,float类型精度通常是不够,float型只能保证6位有效数字,而double型至少可以保证10位有效数字。

 

5、内置算数类型使用建议

1)实际上许多人用整型进行计数,而其中使用unsigned类型比较明智,可以避免值越界导致结果为负数的可能性。

2)当执行整型算数类型时,很少使用short类型,避免隐含赋值越界错误。

3)虽然char是整型,但通常用来存储字符而不用于计算。

4)大多数机器上,使用int类型进行整型计算不易出错。

5)决定使用浮点型时:使用double类型基本不会有错,且计算代价不一定比单精度高。

 

6、在字符串字面值连接过程中,字符串的类型必须是相同的。

例如:普通字符串 "AA", 宽字符串 L"BB"

Cout<<"AA"L"BB"<<endl;  //错误,连接不同类型的行为标准没有定义。

 

7、多字面值。

在一行的末尾加一反斜线符号可以将此行与下一行当做同一行处理。

注意:反斜线符号必须是该行的尾符号,即不允许其后面有注释或空格。

 

8C++是一门静态类型语言,在编译时会做类型检查。静态类型检查是的编译器必须能识别程序中得每个实体的类型。因此,程序中使用变量前必须定义变量的类型。

 

9、变量有左值和右值两种表现形式。变量名又数字、字母和下划线组成,必须以字母或下划线开头。

 

10、变量初始化方式

1)复制初始化(copy-initialization: int ival=1024;

2)直接初始化(direct-initialization: int ival(1024);

直接初始化语法更灵活效率更高,详见13章。

 

11、内置类型在函数体外定义的变量都初始化成0,而函数体里定义的内置类型变量不进行自动初始化。

 

12、变量在一个程序中有且仅有一个定义,但可以有多个声明。声明用关键字extern说明。

extern声明不是定义,也不分配存储空间。事实上,它只说明变量定义在程序的其他地方。但如果声明有初始化,那么它可被当做是定义,即使声明标记为extern

 

13const限定符

1const将一个变量对象转换成一个常量,因为常量在定以后不能被修改,所以再定义时必须初始化。

2)非const对象默认为extern,即在一个文件全局作用域定义后可以被其他文件访问。而const对象默认为文件的局部变量,要是其能够在其他的文件中访问,必须显示地在定义时指定它为extern

 

14、引用&

1)引用必须用与该引用同类型的对象初始化。

2)当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。

3)将非const引用绑定到const对象是不合法的。

4const引用可以初始化为不同类型的对象或者初始化为右值

例如:

double val = 3.14; const int &a = val;

const int &r = 42;

这两种情况在非const引用都是非法的。

 

15typedef的使用目的:

1)为了隐藏特定类型的实现,强调使用类型的目的。

2)简化复杂的类型定义,使其更容易理解。

3)允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。

 

16、不能改变枚举成员的值。枚举成员本身就是一个常量表达式,所以也可用于需要常量表达式的任何地方。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行。

 

17classstruct的区别:

classstruct关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员为publicclass的成员为private