zhangbuda7788 blog

C++基本功

c++

c++基本功













static_cast 在类层次结构中,可以向上转换(安全),也可以向下转换(不安全) 基本数据类型的转换 void* 转换成其他类型(不安全) dynamic_cast 在类层次结构中,既可以向上转换,也可以进行向下转换(安全) const_cast 可以把 const 常变量、const引用常变量 的const 去掉,但是经过测试,转换后地址不变 reinterpret_cast 把一个数据类型,从一种类型转换到另一种类型










虚函数表上面有虚函数指针,含有虚函数的类就会有虚函数表,然后定义了该类对象,该对象就会有一个虚函数表,这里会实现动态多态,当确定了该对象的虚函数的实现,比如隐藏基类的虚函数,重写派生类的虚函数,那么这个虚函数表中的虚函数指针就是这个函数地址。




结束


附加:

关键字

隐藏。当编译多个文件是,所有未加static 前缀的全局变量和函数都具有全局可见性。(extern static int x; // 这个是无效的)

select

监听三类文件描述符,writefds、readfds、和 exceptfds。调用select 函数会阻塞,直到有描述符就绪,调用select函数后通过遍历fdset,找过就绪的文件描述符,select单进程监听的文件描述符有限在linux 默认1024个,当然也可手动修改。注意select支持跨平台。

poll 和select 很相似,也是监听fd,然后返回poll,遍历文件描述符,只是这里没有最大数量的限制

没有文件描述数量的限制,前面select和poll都属于主动轮训,而epoll属于被动触发,给fd注册了事件之后,当事件触发会调用回调函数,把就绪的fd添加到就绪队列,然后epoll_wait负责抓去就绪队列的fd,有边缘触发和水平触发两种模式,边缘触发,取决接收端缓存大小,因为一次事件只会触发一次,如果发送端数据过大,无法全部发送,会在下次触发时再次发送。水平触发则是一次全部发送。

参考01

std::move 完成了复制语义,本质上是为了避免使用拷贝构造和赋值运算符重载,这一点在 unique_ptr 上有体现


未完待续,后面会陆续完善

20240627


#c/c++