C++ 常用知识点速查

做笔记的方法 pad手写笔记更多的作用类似于白纸,用于对知识地即兴推导和梳理。如要整理和存储知识,最好的工具是博客

如果用c++不是为了更好地进行内存管理和性能优化,为什么不使用其他语言呢? (cherno)

基础知识(cherno c++)

IDE

IDE Visual Studio(不是VScode)

编译器 compiler

编译器 生成obj文件(erjinzhi1)(汇编代码)

链接器 linker

链接器 链接各个obj文件成为.exe文件(二进制可执行文件)

声明!=定义,声明的作用在于告诉编辑器相信我有这个函数或变量存在

static 只会在当前的翻译单元使用(这样可以避开一个同名函数定义两次的问题)

inline 直接将函数替换成函数体中的内容,而不是以函数的形式调用

经典的LNK错误
同一个函数定义了两次

预处理

#include <iostream>  
#define INTEGER int
#if
#endif
#pragma once //告诉编译器最多只允许include一次这个头文件
//确保某个头文件只被include一次的另一种方法
#inndef
#define
#endif

头文件

#include 头文件 相当于复制黏贴头文件

#pragma once 告诉编译器最多只允许include这个头文件一次

函数只能定义一次,但可以声明多次

头文件常用于函数声明

尖括号只能寻找编译器路径下的文件
# include <iostream>

引号可以寻找编译器和当前路径下的文件
# include “tools.h”

顶const与底const

int x;
int * p1 = &x; // 指针可以被修改,值也可以被修改
# 指向常量的指针
const int * p2 = &x; // 指针可以被修改,值不可以被修改(const int)
# 常量指针
int * const p3 = &x; // 指针不可以被修改(* const),值可以被修改
const int * const p4 = &x; // 指针不可以被修改,值也不可以被修改

New 关键字

new 做的事,找到符合内存大小的地址,在堆上分配该内存,创建对象,调用对象的构造函数(如有),返回该对象的指针(内存地址)

什么是堆?

什么是栈?

什么是动态分配内存?

//语法
int a = 2;
new *b = new int[50];

Entity * e = new Entity();
Entity * e = (Entity*)malloc(sizeof(Entity));
//两者基本等价,除了第一种写法没有调用类的构造函数

指针和引用

引用必须初始化,且不可更改
指针可以不初始化,且指针的值也可以更改
实际上,指针

左值和右值

什么是左值?什么是右值?
左值,有地址的值
右值,临时变量;临时值,表达式计算结果等都是右值

左值引用
如果函数参数是 type &var时,只接受左值作为函数输入

那如果我们需要同时兼容左值输入和右值输入怎么办?—》常量引用
const type &var 同时接受左值输入和右值输入
实际上,用const type &var的写法,如果输入右值,编译器会自动帮我们创建一个临时变量保存右值,所以实际上输入的还是左值,等价于可以接受右值输入

那如果我们只想接受右值作为函数输入怎么办?–》右值引用
const type &&var

面向对象

类,数据+函数功能
可见性,public,private

static

类外部的static(有点类似定义在所在文件中的私有变量)
该变量只会在这一个翻译单元中起作用,不会被链接到其他翻译单元
extern,只会在外部翻译单元寻找该变量(external linking)

类内部的static,相当于python中的类变量(or方法),同个类的所有对象共享
类静态方法不能访问非静态数据(静态方法只能访问静态数据)

staic的作用,总结下来就两个方面,其一是变量生存期,生存期延长到和程序一样长;其二是变量作用域,变量作用域被限制在局部

STL

reverse

reverse是左闭右开的,如下代码,反转theVector[i,j)的内容

reverse(theVector.begin() + i , theVevtor.begin() + j);

小技巧

++ –

++ 和–的小技巧:a++ 和 ++a 都是将 a 加 1,但是 a++ 返回值为 a,而
++a 返回值为 a+1。如果只是希望增加 a 的值,而不需要返回值,则推荐使用 ++a,其运行速度
会略快一些。

如何找c++投简历用的项目

上youtube
上github tinyWebserver

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值