本文共 2943 字,大约阅读时间需要 9 分钟。
这两天没有太多的事情,c++primer是我大一下学期的时候买的,看过一段时间,之后又没再看,现在大二上学期,在学面向程序设计语言,这两天在回顾c++primer的时候,有的地方会比原先明白很多,有的地方还不是特别的明白,
而我野会把我不会的,和我自己不熟悉的基础知识在这个博客中慢慢记录,可以见证我的成长吧。
2.1 基本内置类型
2.1.2 类型的转换
signed char c = 256; // c的值是未定义的
当我们赋给带符号类型的一个超出它表示范围的值时,结果是未定义的。此时,程序可能继续工作,可能崩溃
也可能产生垃圾数据
含有无符号类型的表达式(unsigned)
(1)无符号的运算
unsigned u = 10;
int i = -42;
cout << i + i << endl; // 输出 -84
cout << u + i << endl; // 输出 4294967264(int 占32位)
(2)无符号的循环算法
for(unsigned u = 10; u>= 0; --u)
cout << u << endl;
当u为-1时,对u进行取模,得到一个大数,再次循环
2.1.3 字面值常量
整型和浮点型字面值
20 // 十进制
024 // 八进制
0x14 || 0X14 // 十六进制
浮点字面值用小数点(3.1415)或科学计数法(3.1415E0或3.1415e0)表示
2.2 变量
2.2.2 声明和定义 关键字(extern)
如果在多文件中使用同一个变量,必须将声明和定义分离
变量的定义必须出现在且只能出现在一个文件中,其他用到该变量的文件必须对其进行声明,却绝不能重复定义
2.3 复合类型
2.3.1 引用
int ival = 1024;
int &refval = ival; // refval 指向ival,是ival的另一个
int &refval2; // 报错:引用必须被初始化
引用和初始值绑定在一起,而不是将初始值拷贝给引用,因为无法令引用重新绑定到另一个对象,因此引用必须初始化
2.4 const 限定符
cont 对象一旦创建后其值就不能再改变,所以const对象必须初始化
const int i = get_size (); // 正确:运行时初始化
const int j = 42; // 正确:编译时初始化
const int k; // 错误:k是一个未经初始化的常量
如果想在多个文件共享用一个const对象,在变量定义前加上关键字extern
例如:// file_1.cc 定义并初始化一个变量,该常量能被其他文件访问
extern const int bufsize = fcn();
// file_1.h 头文件
extern const int bufsize // 与file_1.cc中定义的bufsize是同一个
2.4.1
初始化和对const的引用
(1)允许为一个常量引用绑定非常量的对象,字面值,甚至是一个一般表达式:
int i = 42;
const int &r1 = i; // 非常量对象
const int &r2 = 42; // 字面值
const int &r3 = r1 * 2; // 一般表达式
int &r4 = r1 * 2; // 错误,r4是一个普通的非常量引用
2.4.2
指针和const
指向常量的指针(const int *)和常量引用(const int &)指的是不能改变所指对象的值,而没有规定那个值
不能通过其它路径改变(可以是常量(const int),非常量(int))
const 指针(int * const)----- 常量指针
指针是对象而引用不是,因此可以把指针本身定义为常量。常量指针必须初始化,而一旦完成初始化,它的值就不能发生改变。
int errNumb = 0;
int * const curErr = &errNumb // curErr 将一直指向errNumb
2.4.4
(常量表达式)是指值不会改变,并且在编译过程就能得到计算结果的表达式:
const int max_files = 20; // 常量表达式
const int limit = max_files + 1; // 常量表达式
int staff_size = 27; // staff_size的值会改变
const int sz = get_size(); // 运行时才会得到结果
constexpr 变量:
将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式,声明constexpr的变量一定是一个常量,而且必须用常量表达式初始化:
constexpr int mf = 20; // 20是常量表达式
constexpr int limit = mf + 1; // mf+1是常量表达式
constexpr int sz = size() // 只有当size是一个constexpr函数时,才是一条正确的声明语句
转载地址:http://akxhj.baihongyu.com/