Effective c++ 模板推导 对于传数组,由于c中数组和指针是等价的,因此,数组通过值传递的时候被视为一个指针,模板推导出来也是一个指针。然而,当作为引用传递的时候,其就不和指针等价了,可以推导出其类型和大小。 但实际上,这两个传进去的东西用起来是一样的。都是函数()。 auto 1234template<typename T>void f(ParamType param);ParamTypeOfAu 2025-08-16
c++代码规范 文件后缀名 实现:.cc 声明:.h(模板声明和定义都写在.h里) 内联:.inc(不允许有-inl.h,也就是声明和定义写在一起)或者用于插入文本 实现和声明一一对应,除非如单元测试和只包含main函数的可以只有.cc。 目录 头文件 一个.h文件应该自给自足,其自身就应该include所有其他依赖头文件,并不要求定义任何特别symbols。 除了为模板提供实例化的模板函数需要定义在实例化改模板 2025-08-16
c++多线程 当thread不持有线程的时候,get_id返回0x0. thread.joinable只要thread持有线程,那么就是true,无论线程是否结束 如果在joinable的情况下调用析构,那么就会调用std::terminate终结程序。 实际上thread只是一个包装,真正的线程是里面的线程句柄,native_handle,也就是要用pthread库来处理的对象,可以通过native_hand 2025-08-16
cmake set的变量可以在程序中的宏中使用 add_library. shared:生成.so或.dll文件,不嵌入代码,在使用时会根据.h来进行查找 static:直接将相关代码嵌入任何需要的地方,非常冗余,但很完整 interface:接口库,不单独生成库,只是作为接口给其他库使用 后面只跟随相关源文件 target_link_libraries,属性一般与target_include 2025-08-16
B-树 B树是一种类似于红黑树的树,但并非是二叉树,是多叉树,假设一个节点有n个孩子,那么,该节点将存储n-1个关键字,这些关键字就是孩子们之间的分割线,通过比对这n-1个关键字,即可知道数据是在哪个孩子里面。 由于机械硬盘的随机读取速度非常慢,故希望能在一次读取中读取多个数据,B树就可以优化读取的这一部分,即IO部分。另外,为了保证少读取几次,要使得B树的高度尽可能小。 在电脑中,主存的大小一般小于磁盘 2025-08-16
c++ concurrency in action 使用多线程 good:分离功能,更容易理解和写;性能提高 bad:不一定提高性能;难以理解;占用系统资源;多线程的切换也要耗时 线程实际上也是有自己的一块内存的,join的时候也会清理这一块内存。 detach后主线程就无法再接触到线程了,但保证它在销毁的时候会清理资源。 线程函数的参数是直接拷贝的,而非像普通函数调用一样。因此引用的时候要用std::ref()。 当一个thread本身持有线程的 2025-08-16