前言
个人学习笔记,只记录了不熟悉不明确或平时容易出错的重点难点,并加以个人的理解,如有错误敬请谅解。详细内容参见《C++ Primer 中文版 (第5版)》
本章目录
笔记
-
键盘输入文件结束符:
1)Windows:Ctrl + Z,然后按Enter
2)UNIX:Ctrl + D -
字符型分为char,unsigned char, signed char,其中char和signed char不一样,char表现为带符号和无符号的其中一种,具体取决于编译器
-
一个算数表达式既有无符号又有int,则int会自动转换为无符号
-
泛化的转义序列:
\x 跟1个或多个16进制数字
\ 跟至多3个8进制数字 -
-
对象:一块能存储数据并具有某种类型的内存空间
-
初始化和赋值:
a.初始化:创建变量时给一个初始值
b.赋值:将当前的值擦除,赋新值 -
C++11可以用花括号进行列表初始化:
-
C++是静态类型语言,指在编译阶段检查类型
-
-
引用就是给对象起了一个别名,所以引用不是对象,不能建立引用的引用
-
指针是对象,存放某个对象的地址
-
*号助记:
1).int a=1; int *p = &a;
( *:定义,是个标志,声明的一部分)
2).int b = *p;
( *:解引用符,是运算符) -
同理,&也是声明的一部分或者取地址运算符
-
=赋值改变的永远是等号左边的值,助记:
1).int *p,a=1;
2).p = 0; //指针p为空
3).p = &a; //指针p指向a(给p赋值a的地址)
4).*p = 0; //a赋值为0 -
合法但不易理解,建议直接写int *p1,p2;( *号挨着p而不是int,这样写不容易被误解, 因为 *号只作用于后面最近的一个变量上)
-
*&r,看&,所以是引用
-
const变量必须初始化,默认状态下只在该文件内有效,如果想在多个文件内使用,则定义和声明都需要在前面写extern;
-
const int &r1 = r;常量引用
-
从右往左读:
1)curErr,离他最近const,所以他是一个常量,常量的类型是一个Int型的指针
2)pip,离他最近const,所以他是一个常量,常量的类型是一个double型的指向常量的一个指针
3)前面的const叫底层const,后面的叫顶层const
-
顶层const:指针本身是常量,不可变
-
底层const,指针指向一个常量,指针本身可变,但不可通过指针修改指向的常量
-
三种注意区分:
1)const int *p = &a;
指针p指向常量a,底层const,允许改变p,但不允许通过p改变a*
2)int *const p = &a;
指针p是一个常量指针,顶层const,不允许改变p,但能通过p改变a*
3)const int *const p = &a;
指针p是一个常量指针,指向常量a,不允许改变p,也不允许通过p改变a,左边的叫底层const,右边叫顶层const* -
非常量可以转换成常量,反之不可
-
-
常量表达式是指在编译过程中就能得到计算结果的表达式
-
constexpr常量表达式,C++11新增
-
constexpr将他所定义的对象置为了顶层const,因此下面1)和2)的表示等价
1)constexpr int i = 42; constexpr const int *p = &i;
2)const int i = 42; const int *const p = &i;
-
类型别名:(两种方式:typedef和using)
1)typedef double wages; typedef wages base, *p;
(p是double的别名,等同于typedef double p;)
2)using SI = salesItem;
(C++11新增) -
在
typedef char *pstring
的前提下,const pstring cstr = 0
和const char *cstr = 0
是不等价的
1)const pstring cstr = 0
const修饰pstring,但pstring本身就是指向char的指针,所以这句话定义了一个指向char的常量指针cstr
2)const char *cstr = 0
const修饰char,所以这句话定义了一个指向常量char的指针cstr -
auto(C++11新增)
-
-
auto和const、指针、引用放一起的情况
-
decltype类型指示符(C++11)
1)decltype(f()) sum = x; //sum的类型就是函数f()的返回值
2)返回类型的识别:
i.使用的表达式是变量---->返回该变量的类型,包括const和引用
ii.使用的表达式不是变量---->返回该表达式结果的类型
iii.变量加括号---->返回引用,注:decltype((variable))双层括号的结果将永远是引用
举例:
int i = 42, &r = i;
decltype(r)返回类型是引用,必须初始化
decltype(r + 0)返回类型是int
decltype((i))返回类型是引用,必须初始化
-
decltype和const:
-
decltype和引用
-
预处理器:从C语言继承而来,编译之前执行的程序,预处理变量:#include、#define、#ifdef、#ifndef、#endif
-
头文件保护符