C++Primer逆天合集,持续更新中ing...

1.基础知识

1.        创建 编译 运行

touch a.cpp
gedit a.cpp
g++ -o a.out a.cpp
./a.out

2.        a++ 等价于a = a + 1

3.        ::运算符

4.        类型转换

              赋给无符号类型超出其表达范围时,对总数取模得余数

              赋给带符号类型超出其表达范围时,结果是undefined

              一个算数表达式中既有无符号数又有有符号数时,会将有符号数转化成无符号数

5.        初始化不是赋值

                初始化是创建变量时赋予其一个初始值

                赋值是把对象的当前值擦除,以新值替代它

                四种初始化方式(例 int a{0};   --C++11

6.        建议初始化每一个内置类型的变量

7.        extern

extern int i; #声明
int i; #声明并定义
extern int i = 1; #赋初值,抵消了extern的作用,变成定义了

8.        变量能且只能被定义一次,但是可以多次被声明

9.        引用

引用必须初始化,将和它的初始值对象一直绑定在一起,初始化必须是一个对象

引用不是对象,只是为已经存在的对象所起的另一个名字

引用本身不是一个对象,所以不能定义引用的引用

10.        指针

与引用类似,指针也实现了对其他对象的间接访问

指针本身就是对象,允许对指针赋值和拷贝,且在指针的生命周期内可以先后指向几个不同的对象

指针无须在定义时赋初值,和其他内置类型一样,在块作用域内定义的指针如果没有初始化,也将拥有一个不确定值

在声明语句中指针的类型实际上被用于指定它所指向对象的类型,所以二者必须匹配

指针值的四种状态:1.对象 2.紧邻对象所占空间的下一个位置 3.空指针 4.除此之外的无效指针

试图拷贝或以其他方式访问无效指针的值都会引发错误,编译器不负责检查这类错误,试图使用未初始化的变量也是如此

空指针

int *p = nullptr;  //C++11,其可以转化为任意一类类型的指针
int *p = 0;
int *p = NULL;

面对一条比较复杂的指针或引用的声明语句时,从右向左阅读有助于弄清楚真实含义

int *p;
int *& r = p;

&说明r是一个引用,*说明r引用的是一个指针,int说明r引用的是一个int指针

11.        const限定符

const对象必须初始化,初始值可以是任意复杂的表达式

const对象能参与大部分运算,只要不改变其值

默认状态下,const对象仅在文件内有效。在每个文件中都声明

编译器在编译过程中把用到该变量的地方都替换成对应的值

只在一个文件中定义const,而在其他多个文件中声明并使用它:不管是声明还是定义都添加extern关键字

12.        const引用

对常量的引用不能修改它所绑定的对象

double dval = 3.1415;
const int &pi = dval;
//等价于
double dval = 3.1415;
const int temp = dval;
const int &pi = temp;

pi引用的是temp对象

对const引用可能引用一个非const对象

13.        const和指针

指向常量的指针(pointer to const)不能用于改变其所指对象的值

要想存放常量对象的地址,只能使用指针常量的指针

常量指针(const pointer)必须初始化,存放在指针中的那个地址不能再改变 即不变的是指针本身的值而不是指向的那个值

指针本身是一个常量并不意味着不能通过指针修改其所指对象的值

顶层const表示指针是个常量,底层const表示指针所指的对象是一个常量

允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式(C++11)一般来说,如果认定一个变量是常量表达式,就把它声明成constexpr类型

const int *p = nullptr; //指向int常量的指针
constexpr int *q = nullpt; //指向int类型的常量指针

14.        类型别名

typedef int waes; //waes是int的同义词
typedef waes base, *p; //base是int的同义词,p是int*的同义词

using SI = Sales_item; //SI是Sales_item的同义词; C++11
typedef char *pstring;
const pstring cstr = 0;
//const pstring是指向char的常量指针,并非指向常量字符的指针
const char *ps;
//ps是一个指针,它的对象是指向char的常量指针

/*
const char *cstr = 0;是对const pstring cstr = 0;的错误理解
*/

15.        auto类型说明符(C++11)

未深入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值