首页 > 编程语言 >C++基础知识系列-2

C++基础知识系列-2

时间:2023-04-15 14:33:33浏览次数:47  
标签:系列 函数 右值 int C++ 基础知识 类型 表达式

C++11新特性

C++11易用性改进

静态断言

使用范围几乎不受限制

static_assert断言对象必须是常量表达式,编译期给出断言警告。用于ERROR提示

强枚举类型

// enum关键字
enum class HighSchool: unsigned int {
    student,
    teacher,
    principal
};

使用强枚举类型无法隐式和整型做转换,另外也无法跳出类型作用域,使用前必须先声明类型名。还可以指定类型的底层类型,在忽略底层类型的时候使用int类型。这样也能避免跨平台的问题。

列表初始化

const

const关键字表示只读,不允许修改原始的值

for循环

//declaration:遍历声明,遍历过程中的元素被存储到这里
//expression:遍历对象(表达式、容器、数组、初始化列表)
for(declaration : expression)
{
	//代码体
}

using

//using用于重新定义类型别名,可以给模板类重定义
//语法格式
using newType = oldType;
//例如
using uint_t = int;
//这里funp是一个别名,本质是函数指针,返回类型为int,两个参数的类型分别为(int,int)
using funp  = int(*) (int,int)

nullptr

C++种初始化空指针 就是将其初始化为NULL,避免产生野指针;

C++中NULL和0等价;为了符合兼容性,使用nullptr来初始化空类型指针

default和delete

函数声明 + " = default " ==> 为显式声明的 " = default "函数自动生成函数体;

函数声明+ " = delete " ==> 该函数禁用

final和override

这俩是继承控制关键字。

final:
final修饰函数,只能修饰虚函数,可以阻止子类重写父类这个函数;
final修饰类,则这个类不允许被继承;

override:
用于子类的虚函数,确保子类一定要重写父类的虚函数,否则报错。

constexpr 修饰符

与const区别:const用于设置变量只读修饰常量。在运行时才会检测出来,用错在编译时不会报错。

constexpr用于修饰常量表达式,常量表达式,指的就是由多个(≥1)常量(值不会改变)组成并且在编译过程中就得到计算结果的表达式。

安全红线:禁止在头文件使用const定义全局常量。

练习题:简单工厂模式

C++11类型推导

auto用法

auto用于自动类型推导

限制:不能在函数的参数中使用;
不能作用于类的非静态成员变量(不能用在没有static修饰的成员变量中);
不能定义数组;
不能用于模板。

decltype用法

和 auto 的功能一样,都用来在编译时期进行自动类型推导。主要功能用来声明类型。

例子1:exp 是一普通变量或普通表达式/类表达式的时候,表达式里是个什么类型,推导的就是个什么类型

例子2:返回值类型后置:在函数名和参数列表后面指定返回类型,常用于模板泛型编程。

右值引用

右值引用

C++11新增加了一个类型,称为右值引用,记录为&& ;
左值: 存储在内存中、有明确存储地址(可取地址)的数据;
右值:可以提供数据值的数据(不可取地址);
一般来说所有变量名或对象都是左值,右值是匿名的 ,用于实现移动语义与完美转发。

区分左值右值:主要看其能否取地址。能够对表达式&就是左值,否则就是右值

右值分类
纯右值:非引用返回的临时变量、运算表达式产生的临时变量、原始字面量和 lambda 表达式等
将亡值:与右值引用相关的表达式,比如,T&& 类型函数的返回值、 std::move 的返回值等。

引用无论声明左值引用还是右值引用都必须立即进行初始化,因为引用类型本身并不拥有所绑定对象的内存,只是该对象的一个别名。通过右值引用的声明,该右值又“重获新生”。 int&& i = 5 这样是对的 int& i = 5 这样是错的

右值引用的移动构造函数

延续将亡值的生命周期

移动语义move

move()可以将左值转化为右值 等价于 static_cast强转

闭包的实现

闭包

什么是闭包?
函数是代码,状态是一组变量,将代码和一组变量捆绑 (bind) ,就形成了闭包。 闭包的状态捆绑,必须发生在运行时。

仿函数

将一个对象当做函数来实现。本质为类中对()的重载,类中实现operator()

bind绑定器

延迟执行的思想:将函数和函数需要使用的参数保存起来,然后在需要时调用

​ 情况1:所有的参数都知道,直接把所有参数绑定好就可以。(常用)
​ 情况2:只知道部分参数,这个时候除了绑定需要的参数以外,还需要使用占位符把一些参数暴露出来。(少用)

function用法

主要作用时把任意的函数调用包装到一个一个对象里,并且这个对象,可以保存,传递,复制,然后在合适时间地点调用。

std::function的用法类似于函数指针,底层是一个函数模板类

std::function可以用来包装仿函数、普通函数、类的成员函数等。

lambda表达式

//格式
[capture](params) opt -> ret {body;};
//捕获列表[] : 捕获一定范围内的变量
//参数列表() : 和普通函数的参数列表一样,如果没有参数,参数列表选项可以省略
//opt选项 : 可省略
	//mutable: 可以修改按值传递进来的拷贝(注意只能修改拷贝,而不是值本身)
	//exception:指定函数抛出异常,如抛出整数类型的异常,可以使用throw();
//参返回值类型 : 在C++11中,lambda表达式的是通过返回值后置语法来定义的。
//函数体:函数的具体实现部分,必须有,函数体可以为空。



标签:系列,函数,右值,int,C++,基础知识,类型,表达式
From: https://www.cnblogs.com/wj0518/p/17321102.html

相关文章

  • Semantic Kernel 入门系列:
    当我们使用NativeFunction的时候,除了处理一些基本的逻辑操作之外,更多的还是需要进行外部数据源和服务的对接,要么是获取相关的数据,要么是保存输出结果。这一过程在SemanticKernel中可以被归类为Connector。Connector更像是一种设计模式,并不像Function和Memory一样有强制和明确......
  • 6、后端学习规划:Java学习 - 学习规划系列文章
          Java语言在现在的编程语言排行榜上也是前5的存在。经过这么些年的发展,Java的发展没有C#这么大,但是在编程领域,因为有MVC架构,以及Spring框架的支持,以及微服务架构等等,Java这些年也是风生水起,笔者认为Java在Web端倒是非常适合的,特别是企业应用等业务系统方面。 1......
  • C++ 测试框架 GoogleTest 初学者入门篇 丙
    theme:channing-cyan*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/RIztusI3uKRnoHVf0sloeg开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试的......
  • 深度学习基础知识串烧
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • Java基础知识点内部类之局部内部类和匿名内部类
    一:局部内部类1概述:将内部类定义在方法里面就叫做局部内部类。类似于方法里面的局部变量。2.注意点:外界无法直接使用,需要在方法内部创建对象并使用。3.该类可以直接访问外部类成员,也可以访问方法内的局部变量。publicclassOuter{publicstaticvoidshow(){......
  • Linux基本功系列-help命令
    1.help命令介绍help命令用于显示shell内部命令的帮助信息。help命令只能显示shell内部命令的帮助信息,而linux系统中绝大多数命令是外部命令,所以help命令的作用非常有限。而对于外部命令的帮助信息可以使man命令或者info命令查看。help命令可以放在命令前面,也可以放在命令后面,比如e......
  • C++实现职工管理系统
    使用C++编程实现——管理系统中需要实现的功能如下:退出管理程序:退出当前管理系统增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号,姓名,部门编号显示职工信息:显示公司内部所有职工的信息删除离职职工:按照编号删除指定的职工修改职工信息:按照编号修改职工......
  • nvim-dap C++ cpptools
    https://github.com/microsoft/vscode-cpptoolsgccgdblocaldap=require("dap")dap.adapters.cppdbg={id='cppdbg',type='executable',command='c:\\gnu\\tool\\cpptools\\extension\\debugAdapters\......
  • C/C++人事信息系统[2023-04-15]
    C/C++人事信息系统[2023-04-15]课程设计题目1——链表综合算法设计一、设计内容已知简单的人事信息系统中职工记录包含职工编号(no)、职工姓名(name)部门名称(depname)、职称(title)和工资数(salary)等信息,设计并完成一个简单的人事信息管理系统,要求完成但不限于以下功能:(1)......
  • C/C++校园导航图[2023-04-15]
    C/C++校园导航图[2023-04-15]课程设计题目2——校园导航图的实现一、设计内容(1)设计一个学校的校园平面图,所选结点不少于30个。以图中顶点表示校园各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来往客人提供图中任意景点相关信息的查询......