extern:表示C++中有的方法在C中不存在,就使用extern注释兼容C/C++,extern修饰变量可以被其它文件访问
U:代表无符符号整数 例123U
L:代表长整数 例123L、124UL无符号长整数
0x:代表十六进制 0代表8进制 其余十进制
#define:定义常量 例 #define A 10 表示A=10,在C/C++中叫做宏也叫预处理。就是代码写死不变,而且所有文件都需要的可以定义为宏。
const:定义常量值不能被修改 例const int A=10
using:修饰符,被using修饰对象可以直接使用对象里面的属性和方法
signed:表示变量可以存储负数。对于整型变量来说,signed 可以省略,因为整型变量默认为有符号类型。
unsigned:表示变量不能存储负数。对于整型变量来说,unsigned 可以将变量范围扩大一倍。
short:表示变量的范围比 int 更小。short int 可以缩写为 short。
long:表示变量的范围比 int 更大。long int 可以缩写为 long。
long long:表示变量的范围比 long 更大。C++11 中新增的数据类型修饰符。
float:表示单精度浮点数。
double:表示双精度浮点数。
bool:表示布尔类型,只有 true 和 false 两个值。
char:表示字符类型。
wchar_t:表示宽字符类型,可以存储 Unicode 字符
volatile:修饰符 volatile 告诉该变量的值可能会被程序以外的因素改变,如硬件或其他线程。
restrict:由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。
mutable:表示类中的成员变量可以在 const 成员函数中被修改。
static:用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件或函数访问。
register:用于定义寄存器变量,表示该变量被频繁使用,可以存储在CPU的寄存器中,以提高程序的运行效率。
thread_local:使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。
strcpy(str1,str2):复制str2导致str1
strcat(str1,str2):连接str2到str1的末尾
strlen(str1):返回字符串str1的长度
strcmp(s1, s2):如果 s1 和 s2 是相同的,则返回 0;如果 s1
strchr(s1, ch):返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strstr(s1, s2):返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
struct:定义结构体类似java的class关键字,在C++也有class定义对象,例struct Books{double title}books; books是定义的结构体名称可以定义多个也可以不定义。
friend:在class修饰的类中被friend修饰的函数成为友元函数,友元函数不属于类的成员函数,友元函数可以访问类中的所有成员或者字段。例class Box{ friend void getWidth(Box box); }
inline:内联函数可以直接调用为了提升效率。以空间换时间。注:不易做for循环和复杂操作最好代码控制到1~5行内。
typedef:使用它来为类型取一个新的名字。例 typedef unsigned char BYTE; BYTE a;
virtual:在class修饰的类中被virtual修饰的函数被称为纯虚函数(和java abstract 函数一样)例virtual double getWidth()=0;
new:动态分配内存,new与malloc()函数的区别在于除了动态分配内存,还会创建对象。例double *pvalue=NULL;pvalue=new double; delete pvalue 释放内存
template:模板,类似java泛型定义,例:template
条件编译(#if #else #ifdef #endif ):全局优先处理的程序
#或者##:就是把把变量转换为字符输出 例 #concat(x) #x ,#concat(x,y) x##y,没搞懂其作用
:: 范围解析运算符,例void Box::get(){},在花括号可以访问Box中任意成员属性,在class Box定义的类中必须声明get()方法
位域:使用和结构体struct类似不过是在定义的变量后面增加:占用字节数(:2)来定义位域,例struct Books{ int name:2;}
type [member_name] : width ;定义位域方式
元素 | 描述 |
---|---|
type | 只能为 int(整型),unsigned int(无符号整型),signed int(有符号整型) 三种类型,决定了如何解释位域的值。 |
member_name | 位域的名称。 |
width | 位域中位的数量。宽度必须小于或等于指定类型的位宽度。 |
union:使用union关键字定义共用体,例union Books{ string title;int number; }
类的析构函数~:可以定义在被class所修饰的构造函数中前面加上~不能携带参数和返回任何值,作用就是在释放内存时会及时释放资源。类似java的内存释放
在C/C++中方法的声明类似java的抽象类中的方法,先声明后实现
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
<<= | 左移且赋值运算符,例c<<=2十进制后面加两个零 | C <<= 2 等同于 C = C << 2 |
>>= | 右移且赋值运算符,例c>>=2十进制后面两位直接去掉 | C >>= 2 等同于 C = C >> 2 |
&= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
|= | 按位或且赋值运算符 | C |= 2 等同于 C = C | 2 |
C/C++信号捕获
使用sinal()函数来捕获信号,常规的信号类型如下
信号 | 描述 |
---|---|
SIGABRT | 程序的异常终止,如调用 abort。 |
SIGFPE | 错误的算术运算,比如除以零或导致溢出的操作。 |
SIGILL | 检测非法指令。 |
SIGINT | 程序终止(interrupt)信号。 |
SIGSEGV | 非法访问内存。 |
SIGTERM | 发送到程序的终止请求。 |
使用signal(registered signal, signal handler)来注册,registered signal:注册的信号类型SIGABRT,SIGFPE,SIGILL,SIGINT,SIGSEGV,SIGTERM,signal handler方法名称如下例子
raise()函数:用来生成信号类,参数有SIGABRT,SIGFPE,SIGILL,SIGINT,SIGSEGV,SIGTERM
pthread_create :创建多线程pthread_create (thread, attr, start_routine, arg)
pthread_exit:终止线程当线程里面的任务执行完不需要线程时通过pthread_exit来终止释放
参数 | 描述 |
---|---|
thread | 指向线程标识符指针。线程ID |
attr | 一个不透明的属性对象,可以被用来设置线程属性。您可以指定线程属性对象,也可以使用默认值 NULL。 |
start_routine | 线程运行函数起始地址,一旦线程被创建就会执行。需要执行的函数名称 |
arg | 运行函数的参数。它必须通过把引用作为指针强制转换为 void 类型进行传递。如果没有传递参数,则使用 NULL。,执行的函数参数 |
C/C++容易模板组件
组件 | 描述 |
---|---|
容器(Containers) | 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。 |
算法(Algorithms) | 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。 |
迭代器(iterators) | 迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。 |
上面几个方法都有共同属性