C++中的异常处理 C/C++

C++中的异常处理

一、异常处理 1.1 异常的基本用法 C语言中因为没有异常处理(只能通过返回值来判断错误)机制一直被诟病,因此C++也引入了try...catch机制,使得C++也能像java/python一样来捕获...
阅读全文
猴子拿苹果问题-匿名信号量 C/C++

猴子拿苹果问题-匿名信号量

一、猴子拿苹果问题 逛脉脉时,看到一网友遇到的面试题:有9个苹果,2只猴子。一个猴子每次拿2个苹果,一个猴子每次拿3个苹果。如果剩余的苹果数量不够猴子拿的数量,则停止拿苹果。请用多线程的方式模拟上面的...
阅读全文
进程间通信之共享内存 C/C++

进程间通信之共享内存

共享内存是所有IPC通信中效率最高的,它通过把文件映射到用户进程空间,然后直接通过地址访问来实现多进程通信。相对于其他IPC通信方式而言,少去了把数据从用户空间复制到内核空间,再从内核空间复制到用户空...
阅读全文
EAGAIN和EWOULDBLOCK的处理办法 C/C++

EAGAIN和EWOULDBLOCK的处理办法

EAGAIN和EWOULDBLOCK是linux环境下的两个错误码,在非阻塞IO中经常会碰到,对新手而言,如何处理这两个值非常头疼。如果处理不当,很容易导致程序异常。 EAGAIN的官方定义: “Re...
阅读全文
关于vector的扩容机制 C/C++

关于vector的扩容机制

往vector中添加元素时,如果空间不够将会导致扩容。vector有两个属性:size和capacity。size表示已经使用的数据容量,capacity表示数组的实际容量,包含已使用的和未使用的。 ...
阅读全文
STL中的迭代器失效 C/C++

STL中的迭代器失效

一、迭代器失效 向容器添加或者删除元素可能会导致指向容器的指针、引用或者迭代器失效。使用已经失效的指针、引用或者迭代器将会导致程序出现异常,编码过程中一定要时刻注意迭代器失效的场景。 例如,以vect...
阅读全文
C++中的友元和运算符重载 C/C++

C++中的友元和运算符重载

一、友元 友元可以允许其他类或者函数访问自己的非共有成员,如果类想把它的函数作为友元,只需要增加一条以friend开头的函数声明即可。 1.1 添加外部函数作为友元 以下一个学生类,类中保存了学生的年...
阅读全文
extern C/C++

extern “C”语句的作用

c++中,调用c语言函数时要对函数添加声明extern "C",这是因为c和c++的符号表机制不一样导致的。 假设存在函数fun,经过gcc编译后,该函数在符号表中的名字是fun,但是经过g++编译后...
阅读全文