C++ Prime(第五版)--第二章学习记录
Posted 柔海石涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Prime(第五版)--第二章学习记录相关的知识,希望对你有一定的参考价值。
尽管最近忙于单车组的调试工作,最终还是决定抽出时间把本书的内容学习一遍,摘录其中一些内容并加入我的思考。
1. 如何选择类型
- 明确知晓数值不可能为负数时,选用无符号类型
- 整数运算依据数值范围选用int或long long
- 算术表达式不选用bool和char
- 执行浮点数运算用double
2. 指针字面值常量
- nullptr
3. 初始化
- 初始化 != 赋值
- 列表初始化
//以下两者等价
int a{0};
int a=0;
- 建议初始化每一个内置类型的变量
4. 变量声明和定义的关系
- 变量定义:用于为变量分配存储空间,还可为变量指定初始值(初始化)。- 变量有且仅有一个定义。
- 变量声明:用于向程序表明变量的类型和名字。
- 定义也是声明:当定义变量时我们声明了它的类型和名字。
- extern关键字:通过使用extern关键字声明变量名而不定义它。
5. 引用和指针·
- 引用即别名,引用不是对象
- 指针本身是一个对象,可以被引用
- 空指针
int *p=nullptr;
- 解引用
int a=42,*p=&a;
//*p的值==a的值
- void*指针
- const引用可以绑定一个非常量,但不可以通过该引用修改该非常量值
6. const指针,指向常量的指针,指向常量的const指针
int *const p=&a;
- 指向常量的指针,该指针指向的常量不能修改
const int *p=&a;
//相当于先对p解引用,再用const修饰
- 指向常量的const指针
const int *const p=&a;
7. 顶层const和底层const
- 针对指针的区分方法:
· const在*左边为底层,在右边为顶层
· 从右向左阅读,观察const限定修饰对象
- 不能将底层const指针赋值给非底层const指针
8. constexpr和const的区别和联系
-
const在c中只有“只读”的语义,在c++98中有“只读”和“常量”双重语义。
在“只读”情况下并不能表示该量一定为常量,在特殊情况下会导致程序出错。constexpr在c++11中被引用于表示“常量”
-
const 语义是只读,所以可以在运行时进行初始化
constexpr 语义是常量,所以编译时就要进行初始化
9. 别名声明
using A = int;
10. auto和decltype的区别和联系
- auto自动类型推断,用于从初始表达式中推断出变量的类型,会被表达式赋值
- decltype类型说明符,用于从表达式的类型推断出要定义的变量的类型
- 对于decltype所用的表达式来说,如果变量名加上一对括号,则得到的类型与不加上括号的时候可能不同。
int i;
decltype(i) // int类型
decltype((i)) // 当作表达式对待,int& 类型
over
以上是关于C++ Prime(第五版)--第二章学习记录的主要内容,如果未能解决你的问题,请参考以下文章