Skip to content

Latest commit

 

History

History
185 lines (119 loc) · 5.77 KB

笔记.md

File metadata and controls

185 lines (119 loc) · 5.77 KB

第1章 开始

1.2 初始输入输出

iostream

向流写入数据

  • 输出运算符(<<)

  • 程序员在调试时添加打印语句。这类语句应该保证“一直”刷新流(添加endl)。否则,如果程序崩溃,输出可能还留在缓冲区,从而导师关于程序崩溃位置的错误推断。

使用标准库中的名字

  • 作用域运算符(::)

从流读取数据

std::cin >> v1 >> v2

输入运算符(>>),接受一个 istream 作为其左侧运算对象,接受一个对象作为其右侧运算对象。它从给定的 istream 读入数据,并存入给定对象(v1,v2)中。

1.4 读取数量不定的输入数据

  • windows中,文件结束符时 ctrl +z , 在UNIX(包括MAX OS X) 中,文件结束符是 ctrl + d

1.5 类简介

在C++中,我们通过定义一个类来定义自己的数据结构,一个类就是一个类型。

windows命令行文件重定向:1_23.exe <in.txt >out.txt

这里执行的命令是windows命令行中文件输入输出的重定向,<in.txt 表示从in.txt 读入,>out.txt 表示输出到out.txt 文件中。

第2章 变量和基本类型

2.1 基本内置类型

  • 基本内置类型: C++定义了一套包括算术类型和空类型在内的基本数据类型。

2.1.1 算数类型

2.1.2 类型转换

  • 给无符号类型赋值一个超过它范围内的值时,结果是对无符号类型表示数值总数取模后的余数。
unsigned char x = -1;
//x = (-1+256)%256=255
  • 当赋值给带符号类型一个超过它范围内的值时,结果是未定义的。此时,程序可能继续工作,可能崩溃,也可能产生垃圾数据。

2.1.3 字面值常量

整型和浮点型字面值

  • 0 开头的整数代表八进制
  • 0x 开头的代表十六进制
  • 浮点型字面值默认是一个 double
  • 浮点型字面值表现为一个小数或以科学计数法表示的指数,指数部分用E 或者 e 表示。

字符和字符串字面值

  • 字符串字面值的类型实际上是由常量字符构成的数组。
  • 编译器会在字符串的结尾处添加一个空字符('\0') , 因为字符串字面值的实际长度会比它的内容多1。但字符字面值不会。
  • 字符串字面值可以分行写。
#include<iostream>

int main() {

	std::cout << "a really, really long string literal "
		"that spans two lines" << std::endl;
	//a really, really long string literal that spans two lines
	return 0;
}

转义序列

  • Unicode:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码。
  • ASCII 编码:每个英文字符定义一个唯一的编码。
  • Latin 1编码:Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。**Latin1编码是单字节编码,向下兼容ASCII,**其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
  • UTF-8:UTF-8、UTF-16、UTF-32 中的 "UTF" 是 "Unicode Transformation Format" 的缩写,意思是"Unicode 转换格式",后面的数 字表明至少使用多少个比特位来存储字符, 比如:UTF-8 最少需要8个比特位也就是一个字节来存储,对应的, UTF-16 和 UTF-32 分别需要最少 2 个字节 和 4 个字节来存储。
  • 泛化的转义序列:其形式是 \x 后紧跟1个或者多个十六进制数字或者 \ 后紧跟1个,2个,3个八进制数字。

假设使用的是Latin1字符集

\115(字符M)  \x4d(字符M)

2.2 变量

2.2.1 变量定义

  • 何为对象:即认为对象是具有某种数据类型的内存空间
  • 初始化不是赋值,初始化的含义时创建变量时符赋予其一个初始值,而赋值是是把对象的当前值擦除,而以一个新值来代替。

列表初始化

  • 列表初始化:
int a = 0 ;
int a = {0};
int a(0);
int a{0};
  • 在C++11里面,常用花括号来初始化变量。
  • 当用于内置类型的变量时,这种初始化形式有一个重要特点:如果我们使用初始化且初始值存在丢失信息的风险,则编译器会报错
	long double ld = 4.1415;
	int a{ ld }, b = { ld };//错误
	int c(ld), d = ld;//正确
  • 一个未被初始化的内置类型变量的值是未定义的,如果试图拷贝或者访问此类值会报错
  • 定义在函数体内的内置类型的对象如果没有初始化,则其值未定义。类的对象如果没有显示地初始化,则其值由类确定

2.2.2 变量声明和定义的关系

  • extern 关键字
extern int i; //声明i而并非定义i
int j; //声明并定义j
extern double pi = 3.14;//定义
  • C++是静态类型语言,在编译阶段检查类型。

2.2.3 标识符

  • 不能连续出现两个下划线
  • 不能以下划线紧连大写字母开头

2.2.4 名字的作用域

  • 因为全局作用域本身没有名字,所以当作用域操作符的左侧为空时,向全局作用域发出请求获取作用域操作符右侧名字对应的变量。
#include<iostream>
int a = 10;
int main() {
	int a = 1;
	std::cout << ::a << " " << a << std::endl;//10 1
	
	return 0;
}

2.3 复合类型

  • 复合类型是指基于其他类型定义的类型,比如引用和指针

2.3.1 引用

  • 引用必须被初始化
  • 定义引用时把引用和初始值绑定在一起,而不是将初始值拷贝给引用。
  • 一旦初始化完成,引用将和它的初始值对象一直绑定在一起。
  • 引用即别名
  • 引用只能绑定在对象上,而不能与字面值或者某个表达式的计算结果绑定在一起
int $a = 10; //错误
  • 大部分情况下引用的类型要与直绑定的对象严格匹配
double dval = 3.14;
int &a = dval; //错误