![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++随笔
文章平均质量分 85
c++随笔
郑同学的笔记
CSDN官方认证C++领域优质创作者,CSDN博客专家,2023年6月城市(西安)之星TOP35。分享学习、记录成长。
展开
-
【c++随笔17】C++ 中的 extern 关键字
我们知道,程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是我们所讲的全局变量。它的存储方式为静态存储,其生存周期为整个程序的生存周期。全局变量可以为本文件中的其他函数所共用,它的有效范围为从定义变量的位置开始到本源文件结束。然而,如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。原创 2023-12-18 06:00:00 · 77 阅读 · 0 评论 -
【c++随笔16】reserve之后,使用std::copy会崩溃?
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/134272501qq技术交流群:921273910。原创 2023-12-11 06:00:00 · 172 阅读 · 0 评论 -
【c++随笔08】可变参数——va_list、va_start、va_end、va_arg
原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.csdn.net/article/details/131690070qq技术交流群:921273910当你在编写 C++ 函数时,有时候你会需要处理可变数量的参数。C++ 中提供了 头文件,其中包含了用于处理可变参数的函数和宏。本教程将向你介绍如何使用 来编写可变参数的函数。原创 2023-10-16 06:00:00 · 1152 阅读 · 1 评论 -
【c++随笔07】常量、变量、static
我们通常将不需要被其他模块调用的全局变量或函数用 static 关键字来修饰,static 能够将全局变量和函数的作用域限制在当前文件中。原创 2023-10-02 05:30:10 · 152 阅读 · 0 评论 -
【c++随笔15】c++常用第三方库
一、数据库相关:HDFS、libpq、SQLite、RocksDB、unixODBC、Nanobdc、Ignite; 二、网络通信相关: libcurl、libevent、libssh、mosquitto、nghttp2、libuv; 三、加密和安全相关: 1、OpenSSL四、序列化和数据格式相关: Protobuf、json(nlohmann)、Rapidjson、pugixml、Xlnt、Yamlcpp、Libxl:五、压缩compress\Minilzo、Snappy、zlib;原创 2023-12-04 06:00:00 · 1531 阅读 · 0 评论 -
【c++随笔14】虚函数表
虚函数表是一个由虚函数组成的表格,用于实现动态绑定和多态性。每个包含虚函数的类都有自己的虚函数表,该表列出了该类及其所有基类的虚函数。当一个对象被创建时,它的类虚函数表也被创建,并且可以通过该对象的指针或引用来调用虚函数表中的函数。虚函数表是一种实现动态多态性的机制。每个包含虚函数的类都有一个虚函数表,其中存储着该类的虚函数地址。当通过基类指针或引用调用虚函数时,程序会根据对象的实际类型查找对应类的虚函数表,并调用正确的虚函数。// 基类Aclass A {public:// 基类B。原创 2023-11-27 06:00:00 · 506 阅读 · 0 评论 -
【c++随笔12】继承
C++ 是基于面向对象的程序,面向对象有三大特性 —— 封装、继承、多态。原创 2023-11-13 06:00:00 · 394 阅读 · 0 评论 -
【c++随笔11】面向对象和封装
面向对象编程是一种编程范式,它以对象作为程序的基本单元,将数据和操作捆绑在一起。每个对象都是一个独立的实体,具有自己的特征(数据成员)和行为(成员函数)。面向对象编程的核心思想是通过定义类来创建对象,从而模拟现实世界中的事物和关系。封装是面向对象编程的一个重要概念,它将数据和对数据的操作封装在一个类中。通过将数据成员声明为私有,封装确保数据只能通过类提供的公共接口进行访问和操作。封装提供了一种机制,用于隐藏数据的内部细节,从而增加代码的安全性、可维护性和可重用性。原创 2023-11-06 06:00:00 · 241 阅读 · 0 评论 -
【c++随笔10】C++模板和泛型编程
简介:模板和泛型编程是C++中强大而灵活的特性之一。通过使用模板,我们可以编写通用的代码,以处理不同类型的数据。本文将介绍C++ Primer 第5版中第16章的内容,涵盖模板的基本概念、函数模板、类模板、模板参数、成员模板和可变参数函数模板等主题,并提供相应的示例代码。原创 2023-10-30 06:00:00 · 67 阅读 · 0 评论 -
【c++随笔09】函数指针
函数指针:指向的是函数(而非对象)。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参共同决定,与函数名无关。该函数的类型是int(int,int)。想要声明一个可以指向该函数的指针,只需要用指针替换函数名即可//pf指向一个函数,该函数的参数是const int的引用,返回类型是bool类型从我们声明的名字开始观察,pf前面有个*,因此pf是指针;右侧,是形参列表,表示pf指向的是函数;左侧,发现函数的返回类型是double;原创 2023-10-23 06:00:00 · 114 阅读 · 0 评论 -
【c++随笔13】多态
我们查看《C++ Primer 第5版》第15.3章节 虚函数中的介绍(p537页)OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语,其含义是“多种形式”。我们把具有继承关系的多个类型称为多态类型,因为我们能使用这些类型的“多种形式”而无须在意它们的差异。引用或指针的静态类型与动态类型不同这一事实正是C++语言支持多态性的根本所在。原创 2023-11-20 06:00:00 · 555 阅读 · 0 评论 -
【c++随笔06】友元
友元(Friend)是C++中的一个重要概念,它允许某个函数或类访问其他类中的私有成员。友元被用于提供类之间的访问权限,使得某些函数或类能够绕过常规的访问控制机制来访问私有成员。友元在某些情况下非常有用,但使用不当可能会破坏封装性和数据的安全性。在C++中,友元可以被定义为全局函数、类、类的成员函数。友元关系必须在要访问的类中进行声明或定义。原创 2023-09-25 06:00:00 · 118 阅读 · 0 评论 -
【c++随笔03】构造函数、析构函数、拷贝构造函数、移动构造函数
构造函数的概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用。能够保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。能够保证对象被初始化。构造函数是特殊的成员函数,主要任务是初始化,而不是开空间。(虽然构造函数的名字叫构造)构造函数的函数名和类名是相同的构造函数无返回值构造函数可以重载会在对象实例化时自动调用对象定义出来。int m_day;Date d1;原创 2023-09-04 06:00:00 · 187 阅读 · 0 评论 -
【c++随笔05】C++ 内联函数的优势和使用方法
内联函数是一种优化技术,通过减少函数调用开销和提供编译器优化,可以显著提高程序的执行效率和性能。在使用内联函数时,我们需要注意合适的场景和使用方法,以充分发挥内联函数的优势。原创 2023-09-18 06:00:00 · 246 阅读 · 0 评论 -
【c++随笔04】宏
在 C++ 中,宏是一种预处理指令,用于在编译之前将代码文本替换为指定的内容。宏通常以 #define 开始,并且由一个标识符和一个代码片段组成。宏提供了一种机制,能够使你在编译期替换代码中的符号或者语句。当你的代码中存在大量相似的、重复的代码时,使用宏可以极大的减少代码量,便于书写。__FILE __当前源文件的路径名称;__FUNCTION__函数名称(包含类作用域),这里需要注意的是,如果是类的成员函数,还会将类名也打印,以标识作用域,形如:MyClass::Func;原创 2023-09-11 06:00:00 · 79 阅读 · 0 评论 -
【C++随笔02】左值和右值
完美转发(perfect forwarding)是C++11引入的概念,用于在函数模板中将参数按原样传递给另一个函数,同时保留其值类别(lvalue或rvalue)。它可以在保持精确性的同时避免不必要的复制或移动操作,提高代码的效率。完美转发通常与转发引用类型参数(如模板中的万能引用)一起使用,以实现泛型编程中的参数传递。在函数模板中,我们可以使用 std::forward 函数来进行完美转发。// 定义一个接收传入参数的函数i = 100;// 修改传入的左值参数。原创 2023-08-28 06:00:00 · 297 阅读 · 0 评论 -
【C++随笔01】联合体union —— 一种节省空间的类
定义union定义的语法如下:c++// ...其中,UnionName为该union类型的名称,unionMember1、unionMember2等为union的成员,可以是任何 C++ 数据类型(包括自定义类型),也可以是数组或指针。union的成员占用同一块内存空间,它们的大小取决于成员中占用内存最大的类型。可以使用.和->运算符来访问union中的成员变量。但需要注意的是,不同的成员变量共享同一段内存,因此只能同时访问一个成员变量// demo1int m_id;原创 2023-08-21 06:00:00 · 878 阅读 · 0 评论 -
c++国密算法SM2加密解密demo
c++国密算法SM2加密解密一、代码一、代码封装和nodejs通讯接口:Encrpt_SM2_new()Decrypt_SM2_new()加密解密结果可以和nodejs的模块sm-crypto,加密解密结果可以互相通讯代码工程下载地址;c++通讯接口采用Encrpt_SM2()Decrypt_SM2()源码下载地址int main(){ int result; EccPoint p_publicKey ; uint8_t p_privateKey[NUM_ECC_DIGI原创 2021-08-26 20:58:00 · 9610 阅读 · 15 评论 -
C++char数据类型
这里写目录标题一、Char定义二、字符和字符串区别三、char数组赋值四、string转换为char[]五、char name[]和char *name参考一、Char定义最简单的字符数据类型是 char 数据类型。该类型的变量只能容纳一个字符,而且在大多数系统上,只使用一个字节的内存。请注意,这里的字符常数就是赋给变量的值,要用单引号括起来。双引号代表字符串常数;单引号用于字符赋值;#include <iostream>using namespace std;void main原创 2021-08-26 20:47:17 · 16399 阅读 · 1 评论 -
【智能指针二】智能指针互转
reinterpret_cast 可以认为是 static_cast 的一种补充,一些 static_cast 不能完成的转换,就可以用 reinterpret_cast 来完成,例如两个具体类型指针之间的转换。简单来说,其他不敢转的,reinterpret_pointer_cast敢转,但是它只管转,不管对。reinterpret 是“重新解释”的意思,顾名思义,reinterpret_cast 这种转换仅仅是对二进制位的重新解释,不会借助已有的转换规则对数据进行调整,非常简单粗暴,所以风险很高。原创 2022-10-18 00:11:40 · 4994 阅读 · 0 评论 -
【智能指针一】智能指针初识
智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。(下面图片是错误的)解释:虽然无法赋值和拷贝,但是,如上面的demo,假如你用get和reset就是另外的情况了,因为程序并不知道你把地址赋值给了谁,但是析构会报错的。谣言1:它持有对对象的独有权,即两个 unique_ptr 不能指向一个对象。原创 2022-10-16 01:27:35 · 753 阅读 · 0 评论 -
strcmp和stricmp,C 标准库 string.h
strcmp() 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现不到的字符,或者到达字符串末尾(遇见\0)。C语言 strcmp() 函数用于对两个字符串进行比较(区分大小写)。参数 str1 和 str2 是参与比较的两个字符串。如果返回值 < 0,则表示 str1 小于 str2。如果返回值 > 0,则表示 str2 小于 str1。如果返回值 = 0,则表示 str1 等于 str2。strncat字符串连接操作(前n个字符)strstr 查询子串。...原创 2022-08-16 20:53:12 · 993 阅读 · 0 评论 -
strspn、strcspn、strchr、strrchr特殊字符校验
str1 – 要被检索的 C 字符串。str2 – 该字符串包含了要在 str1 中进行匹配的字符列表。该函数返回 str1 开头连续都不含字符串 str2 中字符的字符数。输出参考:链接: https://cplusplus.com/reference/cstring/strcspn/链接: https://www.runoob.com/cprogramming/c-function-strcspn.htmlstr1 – 要被检索的 C 字符串。str2 – 该字符串包含了要在 str1 中进行原创 2022-07-19 23:36:23 · 374 阅读 · 0 评论 -
c语言如何判定是32位系统还是64位系统
32位和64位指的是操作系统的位数,映射到C语言中,最直观的就是指针类型占用的字节数。地址占32位,所以指针类型同样占32位,即4字节。地址占64位,所以指针类型同样占64位,即8字节。于是,只需要判断任意一个指针的sizeof值,即可获取到位数。...原创 2022-07-05 21:56:23 · 2447 阅读 · 2 评论 -
整型int的拼接和拆分
拼接和拆分的顺序是反的,简单说就是把数据a的高30位左移2位(二进制0000 0000 0000 0000 | 0000 0000 0000 11),然后加上低2位的数据(二进制10)输出参考:C++运算符将两个32位数拼接成64位数原创 2022-07-05 21:35:38 · 2259 阅读 · 0 评论 -
vs如何使用c++20标准
目前c++标准有c++98、c++03、c++11、c++14、c++17、c++20;C++ 98C++标准第一版,1998年发布。正式名称为ISO/IEC 14882:1998。绝大多数编译器都支持C++98标准。不过当时错误地引入了export关键字。由于技术上的实现难度,除了Comeau C++编译器export关键字以外,没有任何编译器支持export关键字。并且这个标准对现代的一些编译理念有相当的差距,有很多在高级语言都应当有的功能,它都没有。这也正是后来需要制定C++11标准的原因所在。C原创 2022-06-05 11:09:39 · 6795 阅读 · 2 评论 -
基类和派生类互转
基类和派生类互转一.基类和派生类的裸指针转换二.dynamic_cast和static_cast的区别1、对于有继承关系的两个类:2、对于没有继承关系的两个类3、demo(==即二.1.(4)==)三.dynamic_cast 转换引用四.基类和派生类的智能指针转换一.基类和派生类的裸指针转换派生类的地址或者指针赋值给基类指针时,一般都用隐式转换。(也可以使用static_cast、dynamic_cast显示转换)反过来,基类指针赋值给派生类指针的时候,必须要显示转换:使用dynamic_原创 2022-04-05 23:37:43 · 2771 阅读 · 0 评论 -
c++指针
c++指针一.指针定义二.上代码三.上图纸四. char* p和 char \*p 和(char\*)p五.const char* p和char* const p一.指针定义先把《c++ primer plus》中的描述记录下,等理解后再来看此,其实很好理解。一种特殊类型的变量——指针,用于存储值的地址。因此,指针名表示的是地址。*运算符被称为间接值运算符(或解除引用运算符),将其应用于指针,可以得到该地址处存储的值。人家书中还给了个例子假设manly是一个指针,则manly表示的是一个地址原创 2022-03-01 21:36:38 · 566 阅读 · 0 评论 -
多态性与虚函数(笔记)
多态性与虚函数(笔记)一、C++多态的概念以及用途简而言之:(指向基类的指针,指向派生类时,无法访问派生类的成员函数,而借助声明虚函数,可以实现基类指针指向派生类时,访问派生类的成员函数,进而有了多态)二C++虚函数详解三、C++纯虚函数和抽象类一、C++多态的概念以及用途简而言之:(指向基类的指针,指向派生类时,无法访问派生类的成员函数,而借助声明虚函数,可以实现基类指针指向派生类时,访问派生类的成员函数,进而有了多态)基类的指针也可以指向派生类对象,请看下面的例子:#include <原创 2021-09-06 20:11:27 · 277 阅读 · 0 评论 -
国密算法(SM2)简介及SM2生成秘钥
国密算法(SM2)生成秘钥一、国密算法介绍二、SM2算法和RSA算法比较三、生成SM2秘钥1、openssl生成SM2秘钥1.1、安装openssl1.2、生成SM2私钥1.3、生成SM2公钥2、nodejs:使用sm-crypto包生成SM2秘钥3、c++生成秘钥参考一、国密算法介绍国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。原创 2021-08-26 14:16:21 · 63467 阅读 · 0 评论 -
vertor释放内存的两种方式(vector容器的两种遍历方法)
vertor释放内存的两种方式1、定义vector2、下标索引遍历vector,释放内存3、使用迭代器遍历vector,释放内存1、定义vectorint类型指针#include "stdafx.h"#include <iostream>#include <vector>using namespace std;void main(){ vector <int*> mVector;}struct类型指针(object对象类型与此相同)#includ原创 2021-08-20 19:47:39 · 613 阅读 · 0 评论 -
c++继承和派生(个人总结笔记)
一、继承和派生1、C++继承的概念及语法继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。继承(Inheritance) 可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。被继承的类称为父类或基类,继承的类称为子类或派生类。继承方式包括 public(公有的)、private(私有的)和 protected(受保护的),此项是可选的,如果不写,那么默认为 priva原创 2021-08-19 21:00:48 · 1884 阅读 · 1 评论 -
CMAP是否可以使用RemoveAll()释放内存?CMAP如何释放内存?
@TOC1、映射表类(CMap)CMap是MFC集合类中的一个模板类,也称作为“字典”,就像一种只有两列的表格,一列是关键字,一列是数据项,它们是一一对应的。2、CMap的格式:template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE >class CMap : public CObjectKey:用作Key的类型(比如整型、浮点型等)ARG_KEY:Key的值VALUE: 用作VALUE的类型ARG_V原创 2021-08-19 19:13:40 · 499 阅读 · 0 评论 -
2.C++类和对象总结
2.C++类和对象总结2.C++类和对象总结2.C++类和对象总结成员函数之间可以互相调用,成员函数内部可以访问成员变量。私有成员只能在类的成员函数内部访问。默认情况下,class 类的成员是私有的,struct 类的成员是公有的。可以用“对象名.成员名”、“引用名.成员名”、“对象指针->成员名”的方法访问对象的成员变量或调用成员函数。成员函数被调用时,可以用上述三种方法指定函数是作用在哪个对象上的。对象所占用的存储空间的大小等于各成员变量所占用的存储空间的大小之和(如果不转载 2021-07-16 17:53:33 · 151 阅读 · 0 评论 -
c++中的this
c++中的this一、c++中为何要有this二、this定义说明三、this总结一、c++中为何要有this1、先来看一个例子#include "stdafx.h"#include <iostream>using namespace std;class Student{private: char *m_name; int m_age; float m_score;public: void setage(int m_age); //声明构造函数 Student(cha原创 2021-07-12 14:12:41 · 23745 阅读 · 11 评论 -
C++ vector 的 begin()、end()、front()、back() 区别
STL中实现源码可见:http://www.cplusplus.com/reference/vector/vector/begin/一、begin函数函数原型:iterator begin();const_iterator begin();功能:返回一个当前vector容器中起始元素的迭代器。二、end函数函数原型:iterator end();const_iterator e...原创 2019-11-06 10:46:39 · 1388 阅读 · 0 评论