C++Primer学习笔记第二章

第2章
C++学习笔记
(这里我只写出我自己的一些自己还需补充的平时容易忘的点)
变量和基本类型:
常用:
bool 布尔类型 未定义
char 字符 8位
short 短整型 16位
int 整型 16位
long 长整型 32位
long long 长整型 64位
float 单精度浮点型 6位有效数字
double 双精度浮点型 10位有效数字
long double 扩展精度浮点型 10位有效数字
除了bool和Unicode字符(上面未提及)外,其他的还可以分为带符号(signed)和不带符号(unsigned)两种
类型转化
转bool,0为false,非0为true;高精度转低进度,可能会出现精度损失,给无符号类型赋予一个大于他最大范围的数,得到的是初始值对无符号类型表示数值总数取模后的余数。
字面值常量,变量,标示符,名字作用域,引用,指针,const限定符直接过,下面是一个小点
指针存对象的地址,用时注意空指针,空指针不同于void*指针
空指针是不指向任何对象,但是已经有类型了,如他是一个整型指针;
而void*指针是一种特殊类型的指针,可以存放任意对象的地址(我们不能直接操作void*指针所指向的对象,因为我们不知道指向的是什么类型的,一般void*指针作用比较有限,用于指针比较,函数输入输出,或者赋给例外一个void*指针)
const:注意const修饰的是哪部分const指针,指向const对象的指针(分清底层定层const),还有const引用。
顶层const是指针本身是个常量,不可改变他指向的对象,但在操作他所指向的对象时,这个对象的值是可以改变的,即他只能对应一个东西,而这个东西的内容可以改变,但他不能放弃这个东西而去指向另外一个东西: int *const pl;
底层const是这个指针指向一个常量,他可以改变他要指向的东西,但他指向的东西本身是不可改变的: const int *p2;
处理类型
类型别名关键字:typedef:
Eg: typedef int int1;
int1 v1;//等价于int v1;
别名声明关键字:using
Eg: using int1 = int;
auto类型说明符:(C++11新标准)
编程是我们常要把表达式的值赋给变量,但这样我们要清楚表达式的类型,auto让编译器替我们去分析表达式所属类型,通过初始值来推算变量的类型,auto定义的变量一定要有初始值
然而在复合类型还有常量的时候,auto推断出来的并不完全一样,编译器会适当改变结果类型使其更符合初始化规则。其次auto一般会忽略掉顶层const,保留底层const,如果一定要一个顶层const,则必须手动加const声明。
比如
C++Primer学习笔记第二章_第1张图片
decltype类型指示符
decltype关键字的作用是获取并返回操作数的值,在此过程中,编译器分析表达式并得到他的类型,但不计算表达式的值(因为无需获取),decltype获取的类型跟原来的类型基本完全一样,引用类型还是引用类型,不忽略顶层const;
例如:
C++Primer学习笔记第二章_第2张图片
decltype(解地址)获取的是一个引用,如果给表达式套上一个括号,则获取的也是引用(双括号一定是引用)
例如:
这里写图片描述
自定义数据结构:
struct结构体,class类(定义完要加分号)
编写自己的头文件:
预处理器
头文件保护符:

ifdef #ifndef #define #endef

预处理变量无视作用域的规则

你可能感兴趣的:(学习笔记)