c++ primer version-5 的整理
section 1:
内置类型和自定义类型;
main函数的返回值:指示状态。0:成功;1:系统定义。
unix和win系统中,执行完程序可以使用echo命令得到返回值。
编译器不同?
iostream有四个IO对象,cin,cout 和 cerr clog (可以往流中写入数据)
输出运算符 << 的左侧必须是ostream对象,右侧为要打印的值,如果不是内置的类型,则需要运算符的重载(友元、成员函数,写法?);endl 除了结束该行,还可以刷新流,将buffer内容刷到设备;
命名空间,用于避免名字定义的冲突
当cin>>object作为循环判定条件时,效果是检测流的状态。有效:未遇到错误;无效:遇到无效输入 or 遇到文件结束符(eof:win使用ctrl z,unix 用 ctrl D)
edit-confile-debug 逐个修正bug
头文件的引用:如果是标准库,用<>,如果不是,使用"xx.h "
文件重定向:命令行 exefile_name <infile>outfile
----------------------------------------
section 2:变量与基本类型
int long 4B 以及long long 8B 的长度;当运算同时有带符号和不带符号的数,会转化为不带符号
可寻址最小单元 字节;存储基本单元 字(看计算机是64bit的)
0开头8进制;0×开头16进制
浮点数,指数部分用e表示,默认字面值是double
转义:常用的有 换行
建议初始化每个内置类型变量
分离式编译——声明和定义;使用 extern 表示不定义,不初始化变量
命名规范:自定义类名大写开头,变量名小写
引用(这里指左值引用)必须初始化,需要且只能绑定在对象上,引用即别名
- 指针和引用都实现了间接访问。区别:指针本身就是对象,无需定义赋初值;允许对指针赋值和拷贝,可以指向不同的对象
空指针 NULL(相当于用0初始化指针) or nullptr(新标准,特殊类型字面值,推荐使用)
void* 指针:存放任意类型对象的地址,只能拿来作比较,or 赋值给另外的void×指针。不能操作该类指针的对象,因为只表示内存空间
const 对象必须初始化,如果想在多个文件间共享const对象,需要在定义前加extern
如果引用指向的是常量,则应该申明为常量引用 ;如果不是,那么对于它的常量引用不能通过引用来修改它的值,只能通过它本身修改,就是说const int & num 和 int const & num(不能修改引用指向的值)不同
常量指针:顶层const(常量指针):int * const p,表示指针本身是常量,不能修改指针指向另外的对象;底层const(指向常量的指针),修饰的是*p,不能修改指向的值*p,可以换对象
aoto会忽略掉顶层const的特性
decltype 类型指示符,decltype(a) r,将r的类型设为a的类型,
constexpr(c++11) 常量表达式 会检查是不是常量表达式,在编译时会计算
typedef or using(新标准) 别名
头文件不能被定义两次——头文件保护符——#ifndef #define #endif
----------------------------------------------
section 3:字符串、向量、数组
头文件不用using namespace的声明
string s(n,'c') 结果为n个c的串;初始化使用等号的是拷贝初始化
字符串能直接比较,getline(is,s)从is中读取一行给s
empty函数和size函数;size函数返回size_type类型变量,是无符号整型数,注意unsigned 数和整型数比较和运算
处理字符:cctype中包含了很多比较函数,例如isalpha(c)如果是字母时为真,tolower(c)如果c是大写字母,输出对应小写字母,否则原输出
vector就是个类模板,创建时需要实例化,初始化方式;使用范围for时,vector的遍历序列大小不能发生改变;
迭代器的目的是通用,所有stl容器都可以使用;可以用auto变量指向 容器的begin or end返回值
字符数组 注意要留1个单位来保存空字符