05 2023 档案
摘要:一、定义 在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称[PID调节器],是应用最为广泛的一种自动控制器。 PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写 二、各部分详解 总述: image.png
阅读全文
摘要:constexptr和常量表达式常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式。 编译过程中得到计算结果。 字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定。 (注意!!!)对于这条语句:c
阅读全文
摘要:1.用constexpr修饰变量 1.1 const 在 C++11 之前只有 const 关键字,从功能上来说这个关键字有双重语义:变量只读,修饰常量,举一个简单的例子: void func(const int num) { const int count = 24; int array[num]
阅读全文
摘要:C++中const和constexpr的作用很多C++的初学者看到const这个关键字的第一反应都是一头雾水,主要是因为const可以出现在很多的位置,以及后面加入的constexpr更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用 const关键字const修饰变量这是最基本的一种用
阅读全文
摘要:constexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化: constexpr int mf = 20; //20是常量表达式constexpr int limit = mf + 1; // mf
阅读全文
摘要:1. 常量表达式 是指值不会改变,并且在编译过程就能得到计算结果的表达式。这是很大的优化:假如有些事情可以在编译时做,它将只做一次,而不是每次程序运行时都计算。 1)字面值常量是常量表达式,如123,'a',3.14等。 2)跟字面值常量相关的一些表达式也是常量表达式,如123+3.14,2<<2等
阅读全文
摘要:constexpr 是 C++ 11 标准新引入的关键字,不过在讲解其具体用法和功能之前,读者需要先搞清楚 C++ 常量表达式的含义。 所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值将
阅读全文
摘要:C++11中新增加了用于指示常量表达式的constexpr关键字。在这里区分两者的用法。 基本含义/语法 const和constexpr都可以来修饰对象和函数。 修饰对象的时候两者之间最基本的区别是: const修饰一个对象表示它是常量。这暗示对象一经初始化就不会再变动了,并且允许编译器使用这个特点
阅读全文
摘要:一、在普通函数中的使用 例如下面的代码, 数组的大小必须是常量,在声明数组array时,用函数返回值,此时会报错: error C2131: 表达式的计算结果不是常数 note: 对未定义的函数或为未声明为“constexpr”的函数的调用导致了故障 用constexpr关键字可以解决这种问题,在G
阅读全文
摘要:前言指针是一种保存变量地址的变量,简单指针容易分析,但是当指针稍微复杂,就很容易无从下手,比如: char *(*(**foo[][8])())[]; 1下面将会由浅入深的探究指针 普通指针#include <cstdio>#include <iostream> using namespace st
阅读全文
摘要:前面我们讲解了指针数组、二维数组指针、函数指针等几种较为复杂的指针,它们的定义形式分别是: 我相信大部分初学者对上面几种形式的指针都非常迷惑,不知道该从哪里入手去理解,为什么p1、p2 是数组,而 p3 却是指针呢,它们仅仅是一个括号的区别。 指针是C语言中最强大最灵活的一部分,也是最难以理解的一部
阅读全文
摘要:声明:1. 文章如有不妥的地方,请您指正,谢谢. 2.另外文中有些细节可能引用您的内容却未给出参考,请原谅我的疏忽,你的共享我不会忘记. 3. Email:lizhiguo0532@163.com 李枝果/lizgo 4. 转载请保留该部分信息 //两个原则//右左法则:首先从最里面的圆括号看起,然
阅读全文
摘要:目录0、摘要 1、指针函数 2、函数指针 3、函数指针数组 4、将函数作为传参传入另一个函数 5、以下两个指针能分析清楚的话,那么 99% 的 C 语言指针问题都难不住你。 参考: 0、摘要指针函数是返回指针的函数,函数指针是指向函数的指针。 int* FunctionReturnsPtr(int
阅读全文
摘要:首先,看如下8个题,如果您能不看任何资料的情况下做对。那么恭喜您,这块应该基本没问题了。因为再复杂的组合都是从这上面8种里变出来的。 1,定义一个整形数 2,定义一个指向整形数的指针 3,定义一个指向指针的指针,它指向的指针,是一个指向整形数的指针 4,定义一个具有10个整形数的数组 5,定义一个具
阅读全文
摘要:五、constexpr说明符 constexpr说明符声明该变量或函数在编译期进行求值,从而适用于需要编译器常量表达式的地方 在变量声明constexpr时,对象或非静态成员函数蕴含const,函数或静态成员变量蕴含inline constexpr变量必须立刻被初始化 constexpr int a
阅读全文
摘要:一、 常量表达式:是指值不会改变并且在编译过程就能得到的计算结果的表达式。 定义常量表达式变量: constexpr 变量类型 变量名; 例如: constexpr int mf=20;/////20是常量表达式 constexpr int limit=mf+1;/////mf+1是常量表达式 co
阅读全文
摘要:文章目录1 const 常量的判别准则1.1 编程实验2 小结 看了前面的关于 const 的内容,不知道是不是有疑问,const 什么时候为只读变量,什么时候是常量?1 const 常量的判别准则只有用字面量初始化的 const 常量才会进入符号表使用其他变量初始化的 const 常量仍然是只读变
阅读全文
摘要:我知道 constexpr 允许您在编译时将对象用作常量,但是什么时候这会有益呢?我试图更好地理解关键字,但我找不到一个很好的例子来解释为什么需要它的构造函数。 下面的两个例子都有效,那么为什么要将 constexpr 放在构造函数上呢? 在构造函数上使用 constexpr: #include <
阅读全文
摘要:内联(inline) 内联函数以牺牲源文件大小为代价减小程序运行的时间,内联函数类似于一种编译器控制的复制/粘贴功能,当一个函数内部逻辑执行的消耗要远小于函数调用本身的消耗时,会额外增加栈空间的消耗,而被标记为内联的函数,编译器会直接将函数的定义“粘贴”到代码的调用处,直接在调用处将代码展开,这样就
阅读全文
摘要:什么是表达式(表达式的定义)?表达式是C语言的重要语法成分,不过对于表达式的定义,好像从来没有人关注过。今天就孔乙己一把吧,哈哈。先贴标准对expression的定义(ISO/IEC 9899:2011 6.5): An expression is a sequence of operators a
阅读全文
摘要:表达式:表达式是运算符、常量和变量的组合。一个表达式可以由一个或多个操作数和零个或多个运算符组成以产生一个值。 例子: a+b C s-1/7*f . . ETC 表达式类型: 表达式可以是以下类型: 常量表达式:常量表达式仅包含常量值。恒定值是不变的值。例子: 5, 10 + 5 / 6.0, '
阅读全文
摘要:目录 一、decltype关键字 二、decltype的推导规则 1、表达式为单独变量 2、表达式为函数调用 3、表达式为左值,或者被()包围 三、 decltype的应用 在前面一章,小编已经对auto类型推导这个关键字进行了介绍,相信小伙伴们都知道了auto的用法以及限制了吧,不知道的小伙伴回头
阅读全文
摘要:系列文章C++11之正则表达式(regex_match、regex_search、regex_replace) C++11之线程库(Thread、Mutex、atomic、lock_guard、同步) C++11之智能指针(unique_ptr、shared_ptr、weak_ptr、auto_pt
阅读全文
摘要:前言记录下阅读此书的感想与总结,一方面能巩固复习,另一方面也能更好地浓缩本书的精华,方便日后的回看。 第五章 右值引用、移动语义和完美转发它们带来的好处 移动语义使得编译器能使用效率更高的移动操作来替换昂贵的复制操作移动语义使得创建只移对象成为可能,如:std::unique_ptr, td::th
阅读全文
摘要:左值、右值、左值引用以及右值引用 std::move和std::forward这两个API主要服务于左值引用和右值引用的转化和转发,因此再了解这两个API之前,需要先弄清楚这几个概念。 左值:一般指的是在内存中有对应的存储单元的值,最常见的就是程序中创建的变量 右值:和左值相反,一般指的是没有对应存
阅读全文
摘要:c++在c++11标准中引入了lambda表达式,一般用于定义匿名函数,使得代码更加灵活简洁。lambda表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更简洁,并且可以在函数内部定义。 什么是Lambda表达式 最常见的lambda的表达式写法如下 auto plus =
阅读全文
摘要:lambda 表达式是 C++11 最重要也最常用的一个特性之一,C# 3.5 和 Java 8 中就引入了 lambda 表达式。 lambda 来源于函数式编程的概念,也是现代编程语言的一个特点。C++11 这次终于把 lambda 加进来了。 lambda表达式有如下优点: 声明式编程风格:就
阅读全文
摘要:Lambda 表达式(Lambda Expression)是 C++11 引入的一个“语法糖”,可以方便快捷地创建一个“函数对象”。 从 C++11 开始,C++ 有三种方式可以创建/传递一个可以被调用的对象: 函数指针 仿函数(Functor) Lambda 表达式 函数指针 函数指针是从 C 语
阅读全文
摘要:1. 可调用对象 在C++中存在“可调用对象”这么一个概念。准确来说,可调用对象有如下几种定义: 是一个函数指针 1 2 3 4 5 6 7 int print(int a, double b) { cout << a << b << endl; return 0; } // 定义函数指针 int
阅读全文
摘要:可调用对象的几种定义 是一个函数指针 是一个具有operator()成员函数的类的对象; 可被转换成函数指针的类对象; 一个类成员函数指针; C++中可调用对象的虽然都有一个比较统一的操作形式,但是定义方法五花八门,这样就导致使用统一的方式保存可调用对象或者传递可调用对象时,会十分繁琐。C++11中
阅读全文
摘要:文章目录为什么需要函数包装器函数包装器bind调整可调用类型的参数为什么需要函数包装器function函数包装器也叫适配器,在C++中其本质是一个类模板。 由于C++的历史遗留问题,导致如果想实现一个函数功能,可以采用函数名、函数指针、仿函数、有名称的lambda表达式,所有这些都是可调用的类型。它
阅读全文
摘要:前言如果你还不知道 C++ 11 引入的包装器和绑定器是什么,可以读读这篇文章,看看有什么 启发;如果你已经对包装器和绑定器了如指掌,也可以读读这篇文章,看看有什么 补充。欢迎交流~😏 可调用对象C++中存在【可调用对象】这样一个概念。即对于一个对象或一个表达式,如果可以对其使用调用运算符(),则
阅读全文
摘要:C++ 包装器 1 简介 包装器用于给其他编程接口提供更一致或更合适的接口。 模板bind可替代bind1st和bind2nd,且更灵活 模板mem_fn让您能够将成员函数作为常规函数进行传递 模板reference_wrapper让您能够创建像引用但可被复制的对象 包装器function让您能够以
阅读全文
摘要:目录 API包装器模式 代理模式 代理模式 vs Impl惯用法 代理模式的简单实现 代理模式应用场景 适配器模式 适配器模式 vs 代理模式 适配器模式简单实现 适配器模式优点 外观模式 外观模式 vs 适配器模式 外观模式的简单实现 外观模式优点 参考 API包装器模式 通常,需要编写基于另一组
阅读全文
摘要:override 关键字 作用:在成员函数声明或定义中, override 确保该函数为虚函数并覆写来自基类的虚函数。 位置:函数调用运算符之后,函数体或纯虚函数标识 “= 0” 之前。 使用以后有以下好处: 1.可以当注释用,方便阅读 2.告诉阅读你代码的人,这是方法的复写 3.编译器可以给你验证
阅读全文
摘要:本文介绍了C++ override关键字使用详解以及与重载的区别。 C++ override关键字使用详解一、override作用二、override在基类与派生类的应用2.1. 纯虚函数2.2. 普通虚函数2.3.Override重写三、Override实例四、C++中重载(overload)与覆
阅读全文