1.成员访问运算符
对于形如point->mem的表达式,根据point的类型不同,其分别等价于
(*point).mem; //point是一个内置的指针类型
point.operator()->mem; //point是类的一个对象
2.运算优先级
*(i++)先运算,再执行加操作;*(++i)相反
3.类型转换
char转int
char s;
int a = s-'0'
int转char
int a = 5;
char s = a +'0'
atoi、stoi、strtoi区别
首先atoi和strtol都是c里面的函数,他们都可以将字符串转为int,它们的参数都是const char*,因此在用string时,必须调c_str()方法将其转为char*的字符串。或者atof,strtod将字符串转为double,它们都从字符串开始寻找数字或者正负号或者小数点,然后遇到非法字符终止,不会报异常:
string strnum=" 232s3112";
int num1=atoi(strnum.c_str());
long int num2=strtol(strnum.c_str(),nullptr,10);
返回结果均为232,程序在最开始遇到空格跳过,然后遇到了字符's'终止。
strtol的第三个参数base的含义是当前字符串中的数字是什么进制,而atoi则只能识别十进制的。
stoi是string库中的函数,他的参数是string,当无法转换时会报错。
void*需要强制类型转换
4.进程通讯
1.管道:速度慢,容量有限,只有父子进程能通讯
2.FIFO:任何进程间都能通讯,但速度慢
3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题 (ROS)
4.信号量:不能传递复杂消息,只能用来同步
5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存