您的位置:首页 > 编程语言 > C语言/C++

《C++Primer》读书笔记---基本语言

2014-10-15 22:33 274 查看
1 基本内置类型

算数类型:整数、浮点数、单个字符、布尔值

类型+含义+最小存储空间如下:

 bool 布尔型

 char 字符型 8位

 wchar_t 宽字符型 16位

 short 短整型 16位

 int 整形 16位

 long 长整形 32位

 float 单精度浮点型 6为有效数字

 double 双精度浮点型 10位有效数字

long double 扩展精度浮点型 10位有效数字

1.1整形

计算机具有存储结构最基本的方法是用块处理存储,将存储器中的每一个字节和一个地址关联起来:

736424 --> 0 0 0 1 1 0 1 1

736425 --> 0 1 1 0 1 0 1 1

在图中左边是字节的地址,地址后面为字节的8位,要让地址736425的字节有意义,必须知道该地址的值的类型

整形默认均带符号,可以使用usigned修饰使其位无符号类型,signed类型的8位内存,存储之范围至少为-127~127,但整型常见策略是其中一位作为符号位。符号位为1,值为负,符号位位0值为正数或者0,一个使用一位符号位的8位整形可以取值从-128~127

如usigned char8位无符号整形取值范围位0~255

当对一个8未的usigned赋值时,如果超过0~255编译器会将该值对unsigned类型的可能取值数目求模,然后取所得值。例如:试图将336存储到8位usigned char中,实际赋值为336对256求模后的值80;-1赋值给usigned时取值255

1.2 浮点型

 float 单精度浮点型 6为有效数字

 double 双精度浮点型 10位有效数字 (推荐使用)

long double 扩展精度浮点型 10位有效数字
2 字面值常量

2.1 整型字面值规则

表示方法: (例如:值20的)

十进制 20

八进制 024

十六进制 0x14

字面值常量类型默认为int或long,其精度决定于字面值----其值适合int就是int类型,比int大的就是long类型。

通过后缀可以强制转换为long或者unsigned或者usigned long类型 例如:

128u //unsigned
128UL //usigned long

128L //long
128LU //usigned long

*没有short类型的字面值常量

2.2 浮点字面值规则

表示方法:(默认浮点字面值常量类型为double类型)

十进制 3.14159F
0.001 //加F表示单精度 12.345L 0. //加L表示扩展精度

科学计数法 3.14159E0f
1E-3F 12.345E1L 0E0

2.3布尔字面值和字符字面值

布尔字面值:true false

字符字面值:‘a’ L‘a’(款字符)

2.4字符串字面值

"Hello World"
字符串字面值编译器默认在末尾加 \0

2.5多行字符串字面值 可以通过使用反斜线在字符串间换行等;

std::cou\

t<<"Hi"<<std::endl;

3 变量

3.1什么是变量 -----
提供程序可以操作的有名字的存储区

变量在使用前必须声明或定义

默认初始值:

string --> 空字符串

int 无默认初始值 作为局部变量

0 作为全局变量

变量的定义:用于分配变量的存储空间,还可以制定初始值,一个程序中变量有且仅有一个定义;

变量的声明:用于向程序表面变量的类型和名字。定义也是声明,通过extern声明变量不是定义

extern int i;
//declares but does not define i 定义在别的地方,因只能定义一次

itn i; //declares ande defines i

3.2const变量

全局作用域里定义的const变量,访问范围为本文件,除非在定义时使用extern修饰,在别的文件中可以使用extren调用

//file1.cpp

int i = 10; 普通全局变量默认为隐身的extern修饰

const int i = 10;

extern const int j = 10;如需对const引用需要显示的extern修饰

//file2.cpp

extren int i; //合法

extren const int i; //不合法

extren const int j; //合法

3.3引用

引用(reference) 就是对象的另一个名字,多用作函数的形参。

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

int ival = 1023;

int &refVal = ival;

当引用初始化后,只要该引用存在,它就保持绑定到初始化时只想的对象,不可能将引用绑定到其他对象。

const 引用只想const对象的引用:

const int ival = 1024;

const int &refVal = ival;

可读取但不能修改refVal,不能对其赋值。对普通的引用绑定到const对象不合法

非const引用只能绑定到与该引用同类型的对象,但const引用则可以绑定到不同但相关的对象或者绑定到右值

double davl = 3.14;

const int &ri = davl;

3.4 typedef名字

typedef 用来定义类型的同义词通常用于以下三种目的:

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

2 简化复杂的类型定义时期更容易解读

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

3.5 枚举

可以为一个或多个枚举成员提供初始值,用来初始化枚举成员的值必须是一个常量表达式;

enum open_mode{intput, output, append}; 默认地,第一个枚举成员赋值为0,后面的每个枚举值比前边的大1;

enum open_mode{intput = 2, output, append}; //默认地output 3, append 4

每个enum 都定义了一种新的类型,枚举类型的对象初始化或者赋值只能通过其枚举成员或者统一枚举类型的其他对象来进行;

3.6 头文件

头文件不应该含有定义,但头文件可以定义类、值在编译时就已知到的const对象和inline函数,这些实体可以再多个原文件中定义,只要每个源文件中的定义是相同的。

因为const是在定义该变量的文件中的局部变量。当头文件中定义了const后,每个包含该头文件的源文件都有了自己的const变量,其名称和值都一样。

3.7预处理

预处理#inlcude只接受一个参数:头文件名。预处理器用指定的头文件的内容代替每一个#include。通过判断预处理变量(_**.H_)是否已经定义来避免多重包含。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: