C++ 语法特性
文章平均质量分 69
Pfirsich Zhang
这个作者很懒,什么都没留下…
展开
-
Smart Point智能指针
C++11中通过引入智能指针的概念使得程序员不需要手动释放内存。原创 2024-06-24 22:57:15 · 111 阅读 · 0 评论 -
Call_once
call_once和once_flag的声明。原创 2024-06-26 16:37:53 · 173 阅读 · 0 评论 -
友元函数&友元类
" 友元函数 " 的 声明 , 不受类的访问控制限制 , 可以在任何地方定义 , 如 : 在 private: , protected: , public: , 下声明 友元函数 , 并不影响到 友元函数 的使用;只要 声明了 " 友元函数 " , 不管在什么位置声明 , 都可以正常通过该友元函数 访问 类中的成员;a.首先是类function的声明【只有声明了类function才能进行定义友元函数】友元类与友元函数类似,可以将一个类声明为另外一个类的友元类。类给予友元函数特别的访问权限。原创 2024-06-24 14:12:20 · 383 阅读 · 0 评论 -
C++ stack、queue和deque
首先大家要知道 栈和队列是STL(C++标准库)里面的两个数据结构。C++标准库是有多个版本的,要知道我们使用的STL是哪个版本,才能知道对应的栈和队列的实现原理。那么来介绍一下,三个最为普遍的STL版本:HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。P.J.Plauger STL 由P.J.Plauger参照HP STL实现出来的,被Visual C++编译器所采用,不是开源的。原创 2024-05-21 15:22:37 · 559 阅读 · 0 评论 -
C++ string类用法
参考。原创 2024-05-21 14:44:09 · 657 阅读 · 0 评论 -
C/C++全局变量、局部变量、静态变量和常量
(2) 允许对构造类静态局部量赋初值 ,例如数组,若未赋以初值,则由系统自动赋以0值。(而非静态局部变量未赋初始值,系统会给个随机值)(3) 对基本类型的静态局部变量,若在说明时未赋以初值,则系统自动赋予0值。而对自动变量没有赋初值,则其值是随机值。静态局部变量是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了上次被调用后留下的值。因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。原创 2024-06-26 16:10:09 · 520 阅读 · 0 评论 -
move&万能引用&完美转发
引用。原创 2024-07-01 23:46:28 · 720 阅读 · 0 评论 -
C++ lambda表达式:[](){}
引自。原创 2024-06-24 23:28:57 · 874 阅读 · 0 评论 -
结构体struct和类class
结构名 结构变量名//创建一个student结构体//属性名//名字//班级//成绩//实例化方法1//用Student这个结构体创建了stu变量,stu拥有Student的所有属性//间接初始化//实例化方法2//直接初始化return 0;类用于创建用户定义的数据类型,可以包含数据成员和成员函数,以实现数据的封装和操作。类是面向对象编程的核心,允许将数据和操作封装在一起,以创建更加模块化和可维护的代码。private:public:// 类的成员函数。原创 2024-05-14 12:39:20 · 616 阅读 · 1 评论 -
C++中的?
这个语句由 3 个子表达式组成,使用?如果条件x < 0是真的,则执行y = 10语句;否则,执行z = 20。所以当x=-1时,x < 0?y = 10 : z = 20的最终结果为y=10。条件运算符强大而独特,它提供了一种表达简单 if-else 语句的简写方法。和 : 单独使用没有特殊含义,合起来用时可以表示。例如:x < 0?:三目运算符一定要用于赋值语句。原创 2024-05-15 15:45:34 · 406 阅读 · 0 评论 -
swap()和reverse()
1.1 功能标准库中的swap()函数可以交换任何数据类型的值,包括int,float,string等,甚至数据结构,如数组,堆栈和队列等。原创 2024-05-17 22:35:59 · 110 阅读 · 0 评论 -
vector<pair<char, char>>
功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。类模板:template struct pair。参数:T1是第一个值得数据类型,T2是第二个值的数据类型。map会对插入的元素按键自动排序,而且不允许键重复。vector的这种用法不会自动排序,而且允许重复。由传递给它的两个实参生成一个新的pair对象。vector的这种用法有点类似于map。原创 2024-05-13 10:44:57 · 324 阅读 · 0 评论 -
INT_MAX 和 INT_MIN是什么?如何防止溢出?
INT_MAX表示一个 32 位符号整数所能够表示的最大值,也就是 2^31 − 1。而INT_MIN则表示最小的负整数。这个值是相对于二进制补码表示法的,也就是说,负数的范围比正数大 1。:这些宏仅适用于 32 位整型变量,如果使用 64 位整型变量,需要使用其他预定义宏,如 LONG_LONG_MAX 和 LONG_LONG_MIN,代表能够存储的最大/最小长整数。是个很大的数,如果想得到数组中最小值,可以先将 min1。INT_MAX 和 INT_MIN 是 C++ 的两个。设成 INX_MAX。原创 2024-05-15 15:40:07 · 475 阅读 · 0 评论 -
const用法详解
实参中,指针会指向一段内存地址,调用函数之后,函数会产生一个临时指针变量,这个变量的地址与实参的地址不一样,但是这两个指针指向的内存是同一块。如果函数作为输出用,不论是什么数据类型,也不论采用指针传递还是引用传递,都不能加const 修饰,否则参数会失去输出功能。在这个函数定义中,我们的的参数strsource加上const修饰,就是为了防止strsource被修改。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。当为指针常量时,指针常量的值不可以修改,就是。原创 2024-05-13 21:28:45 · 403 阅读 · 0 评论 -
【C/C++】字符或字符串长度及所占内存大小的求法
在上述代码中,将字符串内容的大小计算为字符串中字符的个数乘以每个字符的大小(sizeof(char)),然后将结果打印出来。但是对于 std::string 类型的字符串对象,sizeof 运算符返回的是字符串对象本身的大小,而不是字符串内容所占的实际内存大小。std::string 类型的字符串对象会使用动态内存分配来管理字符串内容,所以实际的字符串内容所占内存的大小可能会比字符串对象本身的大小要大。由于字符数组的大小是根据字符串的长度自动确定的,加上终止字符的大小,所以结果为6。原创 2024-08-19 13:03:10 · 292 阅读 · 0 评论 -
new和malloc
malloc开辟一块int类型大小的内存并赋值为20。new开辟一块int类型大小的内存并赋值为20。new开辟一块有20个整数的数组内存,并赋初值0。malloc开辟一块有20个整数的数组内存。原创 2024-07-25 16:42:39 · 162 阅读 · 0 评论 -
C++ bind和placeholders
f1绑定了三个占位符,表示需要传入三个参数;f2绑定了两个占位符和一个常量100,表示需要传入两个参数,其中第一个参数在print函数中对应第二个参数,第二个参数在print函数中对应第一个参数,第三个参数固定为100;f3绑定了三个占位符和一个常量100,表示需要传入三个参数,其中第一个参数在print函数中对应第三个参数,第二个参数固定为100,第三个参数在print函数中对应第二个参数。通过在 bind 函数中使用这些占位符,你可以创建一个可调用的对象,该对象在调用时将使用后续提供的参数。原创 2024-07-13 20:12:53 · 286 阅读 · 0 评论 -
nullptr和NULL
nullptr 既不是整型类型,也不是指针类型,nullptr 的类型是 std::nullptr_t(空指针类型),能转换成任意的指针类型。函数重载:C++允许在同一作用域中声明多个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同。而用nullptr,编译器则会选择 foo(char* s)的函数,因为nullptr不是整数类型。编译上述代码,结果如下图所示,编译器提示有两个函数都可能匹配,产生二义性。NULL是被定义为0的常量,当遇到函数重载时,就会出现问题。原创 2024-07-07 22:21:56 · 265 阅读 · 0 评论 -
C++ 宏
C++中的宏是一种代码片段,可以被宏的值所替换 ( 查找替换(文本替换) )。原创 2024-07-08 10:49:05 · 140 阅读 · 0 评论 -
初始化和实例化、成员类
类的初始化:是完成程序执行前的。在这个阶段,静态的(变量,方法,代码块)会被执行。同时在会。。类的实例化:是指。这个过程中会在中开辟内存,将一些非静态的方法,变量存放在里面。在程序执行的过程中,可以创建多个对象,既多次实例化。每次实例化都会开辟一块新的内存。对象的初始化:对象的初始化是在类实例化后产生了对象、此时这个对象还不能完全能给外部调用,处在一个"中间态"。原创 2024-07-09 22:46:19 · 377 阅读 · 0 评论 -
typedef std::function与回调函数
创建了一个名为 fun_t的类型别名,该别名表示一个接受两个整数参数并返回一个 int 的函数类型。<void(int,int)>: 这部分定义了 func1类型别名所代表的函数类型的签名。具体来说,它是一个接受两个整数参数并返回一个void的函数类型。它允许你为一个已存在的类型创建一个新的、易于使用的名称。myFunction 是一个函数类型别名的变量,可以用来调用一个接受两个整数参数并返回一个整数的函数。function: 这部分指定了要创建的类型别名的名称。这段代码是C++中用于。原创 2024-08-19 16:29:32 · 161 阅读 · 0 评论 -
初始化列表
对象成员必须使用初始化列表进行初始化,因为如果不在初始化列表当中对这个对象和进行初始化的话,那么Date类的构造函数会自动去调用_t 的默认构造函数来进行初始化,但是Time类没有默认构造函数,编译器就会报错引发未定义行为。所以。原创 2024-07-13 22:10:57 · 564 阅读 · 0 评论 -
自动推导、函数模板、类模板
函数模板是通用的函数描述,使用任意类型来描述函数。编译的时候,编译器推导实参的数据类型,根据实参的数据类型和函数模板,生成该类型的函数定义。生成函数定义的过程被称为实例化。返回值 函数名(T &a, T &b, ...){函数体T 是类型参数,代表类型。编译器由模板自动生成函数时,会用具体的类型名对模板中所有的类型参数进行替换,其他部分则原封不动地保留。同一个类型参数只能替换为同一种类型。编译器在编译到调用函数模板的语句时,会根据实参的类型判断该如何替换模板中的类型参数。T tmp=a;a=b;原创 2024-08-19 11:43:20 · 278 阅读 · 0 评论 -
for(auto &c:s)与for(auto c:s)
形如 for(auto c:s) 的格式,auto可以是别的数据类型比如char,int,const char*等等各类数据类型,可以是自定义的数据类型。c是一个变量名称,可以按变量名规则任意定义;s是一个容器名称,可以是一个数组,可以是string等等。for(auto c:s)中s为一个容器,效果是利用c遍历并获得s容器中的每一个值,但是。符号,可以对容器中的内容进行赋值,即。for(auto &c:s)中加了。原创 2024-05-13 21:47:41 · 164 阅读 · 0 评论