C/C++
文章平均质量分 80
C/C++日常
turbolove
学习-模仿-创造
展开
-
现代CMake
CMAKE_CXX_EXTENSIONS:也是BOOL类型,默认为ON,设置为ON的时候表示启用gcc的一些扩展功能;子模块可以使用project命令,将当前目录作为一个独立的子项目,这样的话PROJECT_SOURCE_DIR就会是子模块的源码目录,而不是最外层的目录,构建的目录PROJECT_BINARY_DIR会编程build/父模块的变量会传递给子模块,但是子模块的变量,父模块式感知不到的,但是在设置变量的时候,在最后增加PARENT_SCORER之后,父模块就可以感知到了。原创 2024-06-12 13:52:07 · 881 阅读 · 1 评论 -
C++多线程并发
调用std::mutex的lock()时,会检测mutex是否已经上锁,如果没有锁定,则上锁,如果已经锁定,则陷入等待,直到mutex被另一个线程解锁后才再次上锁。他会在结构的时候检测这个flag,如果没有释放,则调用unlock(),否则不调用。因此当thread所在的函数退出的时候,就会调用thread的析构函数,这会销毁该线程这个时候我们调thread::detach()函数,分离该线程–意味着线程的生命周期不再由std::thread对象管理,而是在线程退出以后自动销毁自己。原创 2024-06-11 14:04:48 · 1079 阅读 · 0 评论 -
C++模板元编程
使用或者其中T是可以变成任何类型调用时候T会替换成需要的类型twice会将T替换成intint main()除此之外,C++规定,当模板类型参数T作为函数参数时,可以省略该模板参数。自动根据调用者的参数去判断类型模板函数可以自动推导类型,从而参与重载模板具有惰性,多次编译的特点。原创 2024-05-31 15:26:35 · 499 阅读 · 0 评论 -
CMake学习
编译器是一个根据源代码生成机器码的程序。原创 2024-05-30 09:44:33 · 614 阅读 · 0 评论 -
tcp和udp代码示例
【代码】tcp和udp代码示例。原创 2024-02-04 10:47:34 · 256 阅读 · 0 评论 -
argparse的基本使用--参数解析
return 0;return 0;输出/B : a/B : a/B : a。原创 2023-11-06 11:00:05 · 178 阅读 · 0 评论 -
MPI并行计算的基本介绍和使用
MPI中已经定义好了一些操作,他们是为函数MPI_REDUCE和一些其他的相关函数,如MPI_ALLREDUCE, MPI_REDUCE_SCATTER和MPI_SCAN而定义的,这些操作用来设定相应的op。因此,在一个正确的程序中,一个就绪发送能被一个标准发送替代,它对程序的语义没有影响,而对程序的性能有影响。MPI_REDUCE_SCATTER 操作可以认为是MPI对每个归约操作的变形,它将结果分散到主内的所有进程中取,而不是仅仅归约到root进程中。用于获取调用进程在给定进程通信域中的进程标识号。原创 2023-11-02 11:07:36 · 2259 阅读 · 3 评论 -
C++ STL库的介绍和使用
STL(标准模板库),是惠普实验室开发的一系列软件的统称。现在主要出现在C++中,但是在引入C++之前该技术已经存在了很长时间了。STL从广义上分为:容器(container) 算法(algorithm) 迭代器(iterator),容器和算法之间通过迭代器进行无缝衔接。STL几乎所有的代码都采用了模板类或者是模板函数,这相比于创痛的由函数和类组成的库来说提供了更好的代码重用机会。STL标准模板库,在我们C++标准程序库中隶属于STL的占到了80%以上。原创 2023-09-06 13:43:25 · 1168 阅读 · 1 评论 -
C++类和对象
构造函数名和类名相同,没有返回值,但是可以有参数 ClassName(){}析构函数在类名前加~,没有返回值,不能重载,不能有参数 ~ClassName(){}public:Person()cout原创 2023-09-04 14:15:28 · 1347 阅读 · 0 评论 -
C++对C的扩展
C++中,预定义宏函数是使用内联函数来实现的,而内联函数本身就是一个真正的函数。由于C++需要支持函数重载,所以C和C++中对同一个函数经过编译之后生成的函数名称是不一样的,这就导致了一个问题,如果在C++中调用一个使用C语言编写模块中的某个函数,那么C++是根据C++的名称修饰方式去查找并且连接这个函数的,这样会发生连接错误。引用是C++对C的重要扩充。在C/C++中,指针的作用基本都是一样的,但是在C++中增加了另外一种给函数传递地址的途径,这就是按引用传递,它也存在于其他语言中,不是C++发明的。原创 2023-08-30 14:29:55 · 865 阅读 · 0 评论 -
C++异常
异常是处理程序中的错误。所谓的错误时指程序运行的过程中发生的一些异常事件(如:除零错误,数组下标越界,所要读取的文件不存在,空指针,内存不足等)原创 2023-08-29 14:27:21 · 1090 阅读 · 0 评论 -
C++类型转换
转换是非常有用的,但是它也会带来一些问题,比如在转换指针时,我们很可能将其转换成一个比它更大的类型,但这可能破坏其他的数据。标准C++提供了一个显示的转换语法,来代替C风格的类型转换。新类型的强制转换可以提供更好的转换过程,允许控制各种不同类型的强制转换。常量指针被转换成非常量指针,并且仍然指向原来的对象:常量引用被转换成非常量引用,并且仍然指向原来的对象。不安全的转换时无法转换,且不支持没有关系的类型进行转换。进行下行黄钻换(把基类指针或者引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。原创 2023-08-28 18:03:58 · 105 阅读 · 0 评论 -
C++模板 - 模板的使用
如果代码定义了赋值操作a=b, 但是T为数组,这种假设就不成立了,同样的,如果里面的语句为判断语句 if(a>b),但是T如果有结构体,该假设也不成立,另外如果传入的是数组,数组名为地址,因此比较的是地址,而这也不是我们需要的操作。为了解决这种问题,可以提供模板的重载为这些特定的类型提供具体化的模板。C/C++都是独立文件编译,因此第二次的编译的时候会替换对应的文件,但是因为没有包含对应的cpp,因此无法获取到对应的实现,因此没有定义过程,因为我们正常不包含cpp,所以模板类的实现和声明放在一个文件内。原创 2023-08-28 16:47:34 · 91 阅读 · 0 评论 -
C++ -- 存储类型说明
存储持续性 : C++使用三种不同的方案来存储诗句(区别:数据保留在内存中的时间)作用域和链接性:作用域描述了名称在文件中的可见范围,例如:函数体重的变量可在函数中使用,但是不能在其他函数中使用。在文件中定义的函数定义之前定义的变量可在所有函数中使用。链接性描述了名称如何在不同单元之间共享。其中:链接性为外部的名称可在文件间共享。链接性为内部的名称只能由一个文件中的函数共享,自动变量名称没有链接性,因为他们不能共享。原创 2023-05-22 16:40:00 · 569 阅读 · 0 评论 -
使用VS Code 配置Ubuntu远程C++开发环境
在linux新建一个code文件夹,并且写入对应的CMakeList.txt文件。 Host : 主机名称,在左侧列表中显示的名称。VsCode 安装 Remote-ssh 插件。 HostName : 主机的IP地址。可以看到正常的一个输出,调试也是正常的。在Ubuntu 中配置ssh远程登录。 User : 需要登录的用户名。原创 2023-03-27 14:20:51 · 911 阅读 · 0 评论 -
harfbuzz 的用法
HarfBuzz 具有两种数据类型:非不透明、 按值传递类型和不透明的堆分配类型。这种 的分离在必须提供 API/ABI 兼容性(几乎)无限期。*值类型:*不透明、按值传递 类型包括整数类型、枚举和小结构。暴露 公共 API 中的结构使得无法扩展 结构在未来。因此,公开结构保留用于 否则效率极低的情况。在 HarfBuzz 中,几个结构,比如 和 ,都属于效率敏感型。类别,并且是不透明的。对于未来扩展性可能为 包括必要的保留成员以保留空间 可能的未来成员。原创 2023-02-23 10:03:49 · 1565 阅读 · 0 评论 -
Freetype 基本的API调用
freetype的基本API调用最后是一个例子,该部分内容来自freetype官网,做了简单的整理。原创 2023-02-22 09:25:23 · 1113 阅读 · 0 评论 -
进程与线程 -- C/C++
进程和线程的基本介绍进程线程库的使用进程线程的通信共享内存信号量管道锁原创 2023-01-30 17:10:06 · 666 阅读 · 1 评论 -
C语言文件操作基础 -- 标准I/O与文件I/O
读写若干个对象: fread()/fwrite() 每次读/写若干个对象,而每个对象具有相同的长度。行缓冲:当在输入和输出中遇到"\n"执行实际的I/O操作,当流和一个终端关联时,典型的行缓冲。fopen() 创建的文件访问权限是0666(rw-rw-rw-);读写一个字符: fgetc()/fputc() 一次读/写一个字符。2.fseek()定位一个流,成功时候返回0, 出错时候返回EOF。读写一行: fgets()/fputs() 一次读/写一行。feof()返回1表示文件已经到末尾;原创 2023-01-10 13:41:01 · 1219 阅读 · 1 评论 -
C++ 内存管理 基本部分
内存管理基本部分主要介绍了C++内存分配的几种形式介绍了new 和delete的重载等原创 2022-11-05 16:06:28 · 572 阅读 · 0 评论 -
实现一个简单的vector
实现一个简单的vector实现std vector 内的基础功能实现迭代器和反向迭代器原创 2022-11-05 14:00:25 · 411 阅读 · 0 评论