![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 56
云端漫步的程狗子
这个作者很懒,什么都没留下…
展开
-
getopt_long_only函数使用
如果没有设置为NULL,那么它就指向一个变量,这个变量会被赋值为寻找到的长选项在longopts中的索引值,这可以用于错误诊断。,如果该字符串里任一字母后有冒号,那么这个选项就要求有参数。原创 2022-09-15 19:59:37 · 400 阅读 · 0 评论 -
全局和局部static变量
虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的 值。这两者的区别虽在于非静态全局 变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在 定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。把全局变量改变为静态变量 后是改变了它的作用域, 限制了它的使用范围。,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。原创 2022-09-01 22:01:51 · 115 阅读 · 0 评论 -
C++ bind
原文链接:https://blog.csdn.net/qq_35721743/article/details/83308765定义是用来绑定函数调用的某些参数,可以将bind函数看作一个通用的函数适配器,它接受一个可调用对象,生成新的可调用对象来适应原对象的参数列表。调用bind的一般形式:auto newCallable = bind(callable,arg_list);其中,newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参原创 2022-04-20 19:24:08 · 4170 阅读 · 1 评论 -
C++ static
非成员函数中1、当变量声明为static时,空间将在程序的生命周期内分配,其被存放在在全局数据区。即使多次调用该函数,静态变量的空间也只分配一次,前一次调用中的变量值通过下一次函数调用传递。2、静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放。#include <iostream> #include <string> using namespace std; void demo() { static..原创 2022-04-18 13:59:51 · 78 阅读 · 0 评论 -
C++ 赋值构造和拷贝构造
拷贝构造1、定义拷贝构造又称为复制构造,是一种特殊的构造函数,当使用一个现有的旧对象构造一个新对象时就会调用拷贝构造函数,拷贝构造函数只有一个引用型的参数(类对象本身)2、格式:A(const A &a)如果没有自己实现拷贝构造函数,编译器会自动一个拷贝构造函数,负责把旧对象中的所有数据拷贝给新创建的对象(浅拷贝)3、拷贝构造分为深拷贝和浅拷贝:1、如果类中的成员有指针变量的话,那么浅拷贝只拷贝指针变量的值;2、深拷贝则是拷贝指针变量所指向的目标。系统自动生成的拷..原创 2022-04-16 23:12:33 · 747 阅读 · 0 评论 -
C++ 智能指针
智能指针分为:auto_ptr、shared_ptr、weak_ptr、unique_ptr。智能指针主要作用:1、防止忘记调用delete释放内存;2、管理在堆上分配的内存,它将普通的指针封装为一个栈对象,实质是一个对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。auto_ptrshared_ptr1、定义shared_ptr多个指针指向相同的对象。shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。每使用他一次,原创 2022-04-08 22:07:13 · 1322 阅读 · 0 评论 -
C++ 不能被继承的类
类只能在栈上创建因为在堆上创建对象需要调用new,所以将operator new设置为私有的即可//如何设计类只能建立在栈class Test{public: Test() { std::cout << "call construct function\n"; } ~Test() { std::cout << "call destruction function\n"; } vo..原创 2022-04-03 23:08:06 · 876 阅读 · 0 评论 -
C++ 类模板和模板类
类模板通常使用template来声明,后面接typename 或者class。接着是类型T,告诉编译器,碰到T不要报错,表示一种泛型.实际上是建立一个通用类,其数据成员、成员函数的返回值类型和形参类型不具体指定,用一个虚拟的类型来代表。使用类模板定义对象时,系统会实参的类型来取代类模板中虚拟类型从而实现了不同类的功能。template <typename 类型参数1,typename 类型参数2>class 类名{ 类成员声明 };或者template <..原创 2022-04-03 22:14:18 · 701 阅读 · 0 评论 -
C++ this指针
基本知识1、this只能在成员函数中使用,全局函数、静态函数都不能使用this;2、成员函数默认第一个参数为this,this生命周期同任何一个函数的参数是一样;3、this指针的值是当前调用成员函数的对象的起始地址4、this指针并不是对象本身的一部分,不影响sizeof的结果5、...原创 2022-04-02 23:18:49 · 415 阅读 · 0 评论 -
C++ 接口和抽象类
抽象类定义1、C++ 语言中没有抽象类的概念,可通过纯虚函数来实现抽象类,定义了一个或多个纯虚函数的类称为抽象类;2、抽象类可以包括抽象函数,抽象函数指的是没有具体内容的函数,一般用"= 0"修饰;3、可以同时包括普通的函数和抽象函数;4、派生类必须实现抽象函数,在派生类中,基类的纯虚函数被实现后就变成虚函数,如果派生类没有实现基类的纯虚函数,那么派生类也是抽象类一个;5、抽象类不能创建对象,只能用于继承;class shape{public: //纯虚函数 virtua..原创 2022-03-26 21:53:12 · 1113 阅读 · 0 评论 -
C++ new operator、operator new、placement new
定义new/delete动态管理对象,new[]/delete[]动态管理对象数组。在C++中,int 、char等内置类型的变量也是存在构造函数和析构函数的,只是通常对它们,系统调用了默认的构造函数来初始化以及默认的析构(编译器优化)。所以new int、new int(3)看起来和普通的定义好像没什么区别。 但对于自定义类型的对象,此种方式在创建对象的同时,还会将对象初始化好;于是new/delete、new []/delete []方式管理内存相对于malloc/free的方式管理的优势就体现..原创 2022-03-20 15:56:14 · 1500 阅读 · 0 评论 -
C++ 构造函数和参数初始化表
构造函数基本概念1、构造函数的函数名必须与类名相同,构造函数无返回值,当我们创建类对象的时候,构造函数会被自动调用,而无需我们主动调用。2、一个类中可以有多个构造函数,构造函数之间构成函数重载的关系3、通常如果在定义类的时候,如果没有主动声明任何一个构造函数,系统会自动生成一个默认构造函数,默认构造函数就是不带任何参数的构造函数。其它带参数的构造函数统称为带参构造函数。构造函数为protected 和 private的场景如下:1、如果你不想让外面的用户直接构造一个类(假设这个类的名字为A..原创 2022-03-19 23:10:26 · 2160 阅读 · 0 评论 -
CMakeList笔记
定义CMake是一种跨平台编译工具,CMake主要是编写CMakeLists.txt文件,然后通过cmake命令将CMakeLists.txt文件转化为make所需要的Makefile文件,最后用make命令编译源码生成可执行程序或者库文件。语法规则指令是大小写无关的,参数和变量是大小写相关的CMakeLists.txt常见指令1、cmake_minimum_required(VERSION 2.6)命令#指定CMake编译最低要求版本例:CMAKE_MINIMUM_REQUIRE..原创 2022-03-19 19:20:00 · 1364 阅读 · 0 评论 -
C++ 嵌套类和局部类
嵌套类定义一个类可以定义在另一个类的内部,被称为嵌套类,定义嵌套类的类被称为外部类。嵌套类时一个独立的类,和外层类基本没什么关系,它是一个独立的类,它的成员不属于外部类,外围类的成员也不属于该嵌套类。作用之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。作用域1、如果嵌套类声明在一个类的私有部分,则只有嵌套类的外部类可以访问;2、如果嵌套类声明在一个类的保护部分,则只有嵌套类的外部类和外部类..原创 2022-03-16 23:22:42 · 853 阅读 · 0 评论 -
c++ 类继承
基本概念class Base {public: // 公有成员protected: // 受保护成员private: // 私有成员}从已有类派生出新类时,可以在派生类内完成以下功能:(1)可以增加新的数据成员(2)可以增加新的成员函数(3)可以对基类的成员进行重定义(4)可以改变基类成员在派生类中的访问属性继承方式限定了基类成员在派生类中的访问权限,包括 public、private和protected。如果不写,==默认为 private,==不同的继..原创 2022-03-16 22:36:40 · 618 阅读 · 0 评论 -
C++ lambda表达式
定义lambda表达式又称匿名函数,它没有名字,其构造了一个可以在其作用范围内捕获变量的函数对象,编译后会生成一个匿名类。lambda表达式形如:[capture] (parameters) specifiers -> return_type { body }1、[capture]:捕捉列表。捕捉列表总是出现在Lambda函数的开始处。编译器根据 [ ] 引出符判断接下来的代码是否是Lambda函数; 1.[var]表示值传递方式捕捉变量var; 2.[=]表示值传递方式捕捉所有父作用..原创 2022-03-15 23:16:53 · 71 阅读 · 0 评论 -
std::move笔记
左值、右值、左值引用和右值引用1、左值和右值的概念左值:有名字的变量(对象),可以被赋值,代表一个在内存中占有确定位置的对象,可以在多条语句中使用;右值:就是临时变量(对象),没有名字,只能在一条语句中出现,不能被赋值,不在内存中占有确定位置的表达式。下面的例子,赋值运算符要求一个lvalue作为它的左操作数,当然var是一个左值,因为它是一个占确定内存空间的对象,4是右值左值可以被修改,而右值不能 int var; var = 4;2、引用左值的声明符号为”&”..原创 2022-03-06 21:16:52 · 354 阅读 · 0 评论 -
std::function详解
定义std::function是函数包装器,能存储任何符合模板参数的函数对象,拥有一致参数类型、相同返回值类型(其实不必完全相同)的函数对象,可以由 std::function 统一包装起来,具有多态性,是模板类。通常定义函数指针方法:typedef void(*ptr)(int,int),int(*ptr)(void),这里的ptr就是一个函数指针。而使用了std::function这个类的时候,我们可以这样使用。例如: std::function<void(int ,int)&g..原创 2022-03-06 00:05:08 · 869 阅读 · 0 评论