Modern C++的应用,实现golang中的defer

2023-11-02

modern C++实现 golang 的defer

关于RAII的一些思考。

defer 的简介

注:没有 golang 语法基础的读者可以看看,反之,可以跳过。

golang语法中的defer是什么?

defer用来声明一个延迟函数,把这个函数放入到一个栈上, 当外部的包含方法return之前,返回参数到调用方法之前调用,也可以说是最外层方法体执行结束时调用。

举一个简单的例子,在函数test()中用defer声明在函数结束后执行打印Exit function -> test()

package main
import "fmt"

func test() {
   
    defer fmt.Println("Exit function -> test()")
    fmt.Println("Enter function -> test()")
}

func main() {
   
    test()
}

执行结果:

Enter function -> test()
Exit function -> test()

涉及 modern C++ 语法简介

auto

C++11标准之前的是auto含义的分割线,之前的auto没有什么实际的含义,仅仅代表除了static之外的存储属性。之后的auto用于编译器自动推导变量类型,用auto初始化的变量编译器会自动推导其类型。

需要注意的是:

  • auto定义变量的时候没有缺省值。下面这样的代码就会报错:

    auto value;
    
  • auto定义的变量第一次推导出变量的类型就不会在自动更改,比如下面这样的代码编译器就会有警告:

    auto value = 10;
    value = 1.2; // Warning: implicit conversion from 'double' to 'int' 
    			 // changes value from 1.2 to 1
    

几个小例子:

注:读者感兴趣的话,请自行在MSVC编译器下编译,因为MSVC编译出的这段代码可视性能好一点。博主刚把MSVC卸载了,暂时也没有windows下的C/C++编译环境。

#include <iostream>
#include <typeinfo>

// 读者先不必理会这是个什么东西,这个只是用来打印分割线的
auto divider = [] {
   
    for(auto i = 0; i < 10; ++i) std
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Modern C++的应用,实现golang中的defer 的相关文章

  • 手写android Log 源码(简单版)

    有一天晚上 看了两篇老罗的博客 Android日志系统Logcat源代码简要分析 和 Android日志系统驱动程序Logger源代码分析 于是我就想android10 中 log 是怎么实现的 然后又看了一篇别人的博客 Android10
  • C/C++中类型变量转换之间的数值溢出

    在编程中 不同类型的值转换时会产生溢出问题 溢出问题的主要发生在类型范围大的数值转换成范围小的数值的过程中 例 double gt float gt long gt int gt short gt byte char 下面举个例子 incl
  • 字符检测:C语言ispunct()函数--判断字符是否为标点符号或特殊字符

    ispunct 函数用来检测一个字符是否为标点符号或特殊字符 其原型为 int ispunct int c 参数 c 为需要检测的字符 返回值 若 c 为标点符号或特殊符号 非空格 非数字和非英文字母 返回非 0 值 否则返回 0 注意 此
  • 链接库介绍

    什么是库 计算机中 有些文件专门用于存储可以重复使用的代码块 例如功能实用的函数或者类 我们通常将它们称为库文件 简称 库 Library 以 C 语言为例 如下展示一个函数库 myMath c int add int a int b re
  • Qt/MFC获取主窗口的指针

    在不同的窗口类中 不同的类之间需要互相访问 有时需要知道另一个窗口类的指针来调用他的函数 本文介绍两种方法 如下 Qt 方法1 WId ir WId FindWindow NULL L Target className pM classNa
  • C++虚析构函数、纯虚析构函数

    虚析构函数 析构函数的工作方式是 最底层的派生类 most derived class 的析构函数最先被调用 然后调用每一个基类的析构函数 因为在C 中 当一个派生类对象通过使用一个基类指针删除 而这个基类有一个非虚的析构函数 则结果是未定
  • C/C++语言图形化窗口创建,与设置。

    1 首先我们要引入头文件 include
  • C++异常处理机制详解

    异常处理是一种允许两个独立开发的程序组件在程序执行期间遇到程序不正常的情况 异常exception 时相互通信的机制 本文总结了19个C 异常处理中的常见问题 基本涵盖了一般C 程序开发所需的关于异常处理部分的细节 1 throw可以抛出哪
  • c语言---字符串为什么不能修改内容???字符串常量存放在常量区吗???

    疑惑 1 const修饰的变量都存放在常量区吗 2 字符串常量存放在那 为什么字符型指针 char 指向字符串不能修改其内容 字符串的演变 char p 123456 123456 常量字符串 char static const char
  • C++ 创建共享内存

    共享内存用于实现进程间大量的数据传输 共享内存是在内存中单独开辟一段内存空间 这段内存空间有自己特有的数据结构 包括访问权限 大小和最近访问时间等 1 shmget函数 include
  • 字符编码与C++

    背景 C 的项目 字符编码是一个大坑 不同平台之间的编码往往不一样 如果不同编码格式用一套字符读取格式读取就会出现乱码 所以本文旨在对字符编码的知识做一个大概的梳理 字符编码定义 计算机是以二进制的形式来存储数据的 它只认识 0 和 1 两
  • 从Qt谈到C++(一):关键字explicit与构造函数

    原文 http blog csdn net guodongxiaren article details 24455653 主题 Qt 提出疑问 当我们新建了一个Qt的widgets应用工程时 会自动生成一个框架 包含了几个文件 其中有个ma
  • C语言中的快速排序库函数

    前言 由于自己的记性一直不好 总是记不住c语言中的快速排序函数 于是自己写下博客来记录一下 快速排序库函数 c语言中的快速排序库函数如下 注意 库函数是在stdlib h头文件中 qsort arr length size t cmp 其中
  • c语言中的字符数组和字符串之间的关系

    一 字符串的结束标志 1 很多时候我们都是可以看到相关的内容就是 使用数组来存储字符串 也就是我们经常会使用到sizeof 和这个函数 而 这个函数只是求出当前该数组的最大容量 而不是数组中实际存放的内容 我们一般都是需要使用 0 来表示字
  • struct和typedef struct彻底明白了

    struct和typedef struct 分三块来讲述 1 首先 注意在C和C 里不同 在C中定义一个结构体类型要用typedef typedef struct Student int a Stu 于是在声明变量的时候就可 Stu stu
  • C++ 虚函数表解析

    C 虚函数表解析 陈皓 http blog csdn net haoel 前言 C 中的虚函数的作用主要是实现了多态的机制 关于多态 简而言之就是用父类型别的指针指向其子类的实例 然后通过父类的指针调用实际子类的成员函数 这种技术可以让父类
  • cout 格式化输出

    将 cout 的 flag 保存到变量 以便修改后的恢复 ostream fmtflags old cout flag 无参将返回当前 flag 值 cout flag old 恢复到原先保存的值 将 bool 值以 literals 输出
  • c/c++资源汇总

    Visual C 视频技术方案宝典 pdf http www t00y com file 17628500 Windows 图形编程 pdf http www t00y com file 17628502 Windows程序设计 第2版 p
  • C++系列目录

    基础语言篇 C 数据类型 C位操作 C预编译处理 C指针 C结构体与枚举类型 C 函数 C 虚函数 C 容器与算法 C 类 C I O处理 C 重载操作符与转换 模板与泛型 C C 编译和调试 C C 动态链接 C C 通用MakeFile
  • C语言的不完整类型和前置声明

    声明与定义 Declaration and Definition 开始这篇文章之前 我们先弄懂变量的declaration和definition的区别 即变量的声明和定义的区别 一般情况下 我们这样简单的分辨声明与定义的区别 建立存储空间的

随机推荐

  • 正点原子IMX6ULL阿尔法USB摄像头的远程调用(五)配带口罩检测

    本文介绍的是利用网上开源的配带口罩检测算法 结合IMX6ULL的USB摄像头制作一个小系统 首先向开源团队致敬 这个太强了 一共包括了大概有六七种检测方式 每一种识别率就很高 棒棒的 源码下载 源码地址 https gitee com mi
  • Unity Shader入门精要总结--透明效果

    前言 透明度测试 它采用一种 霸道极端 的机制 只要一个片元的透明度不满足条件 通常是小于某个阈值 那么它对应的片元就会被舍弃 被舍弃的片元将不会再进行任何处理 也不会对颜色缓冲产生任何影响 否则 就会按照普通的不透明物体的处理方式来处理它
  • seata docker 连接nacos

    1 拉取镜像 docker pull seataio seata server 1 3 0 2 运行镜像 docker run name seata1 3 0 p 8091 8091 d seataio seata server 1 3 0
  • 后台登录功能开发

    目录 需求分析 页面原型展示 找到项目资源 产品原型 gt 瑞吉外卖后台 管理端 登录 html 点开登录 html页面 登录页面有两个文本框需要用户输入用户名和密码 客户端要进行非空校验 单击 登录 按钮之后 表单数据以JSON格式通过A
  • JavaWeb笔记——请求Request、响应Response

    JavaWeb笔记 请求Request 响应Response tip1 idea建立maben自带的springboot模块 tip2 springboot运行时error java 错误 无效的源发行版 17 tip3 springboo
  • c++语言字母转换,c++中数字与字符串之间的转换方法(推荐)

    1 字符串数字之间的转换 1 string gt char string str OK char p str c str 2 char gt string char p OK string str p 3 char gt CString c
  • 华为OD机试 C++【生日礼物】

    题目 你要为孩子的生日准备一个蛋糕和一个礼物 但你有限的预算 现在 有一堆蛋糕和礼物的价格列表供你选择 你的任务是找出有多少种购买组合能在预算内 输入 第一行 不同蛋糕的价格 用逗号分隔 第二行 不同礼物的价格 用逗号分隔 第三行 你的预算
  • 如何实现CSS中flex布局最后一行左对齐

    1 效果 2 HTML div class container div class list div div class list div div class list div div class list div div class li
  • 在浏览器中输入URL并回车后都发生了什么?

    在浏览器中输入URL并回车后都发生了什么 四个步骤 1 浏览器解析url拿到ip地址 2 建立TCP连接 3 请求和传输数据 4 渲染页面 如何理解这四个步骤 1 简单了解URL URL俗称网页 网址 示例解说 https www baid
  • uniapp scroll-view切换tab时,右侧区域滚动条不能回到最上面的解决方案

  • 计算机语言lc-3,LC-3 小型计算机

    Last updated on 2020年9月7日 LC 3 五大部件 内存 包括 2 16 x 16 bits 存储单元 以及 16 位的 MAR 和 16 位的 MDR 寄存器 处理单元 包括 ALU 和 8 个 16位 的寄存器 R0
  • Lsn2_布局渲染流程与原理_2018-1-3

    GPU GPU用途是将计算机系统所需要的显示信息进行转换驱动 并向显示器提供行扫描信号 控制显示器的正确显示 是连接显示器和个人电脑主板的重要元件 也是 人机对话 的重要设备之一 显卡作为电脑主机里的一个重要组成部分 承担输出显示图形的任务
  • iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max 屏幕尺寸,分辨率,PPI 详细数据对比

    信息来源 PaintCode
  • IPv6网络中DNS的风险分析

    IPv6网络中DNS的风险分析 DNS Domain Name System 域名系统是支撑互联网运行的重要核心基础设施 因此DNS系统也成为互联网攻击的最主要目标 DNS安全意义重大 一旦发生重大DNS攻击事件 将可能会影响大范围互联网的
  • 场效应三极管及其放大电路(1)MOSFET详解

    目录 MOS管种类 MOS管结构和工作原理 NMOS管增强型结构 NMOS管增强型工作原理 阈值电压VTN和截止区 可变电阻区 恒流区形成 I V特性曲线及特性方程 总结 NMOS耗尽型 与NMOS增强型区别 I V特性曲线及特性方程 总结
  • 如何看懂元器件手册的温升指标

    导语 我们知道半导体对温度很敏感 在元器件手册里经常会看到Thermal Information这一项 它描述的就是半导体器件的一些热学参数 如下图 1 它来自LM7805的手册 今天将讲述这些参数如何使用 图 1 先明白几个概念 热阻 T
  • ASP.NET Core:跨平台Web开发框架

    ASP NET Core是一个免费且开放源代码的Web框架 以及由微软和社区开发的下一代ASP NET 它是一个模块化框架 既可以Windows上的完整 NET Framework上运行 也可以在跨平台 NET Core上运行 该框架是一个
  • 两分钟了解HTTP/1.1 协议中的8种请求方法

    HTTP 1 1 协议中的请求方法 1 GET 用来从服务器上获取数据 指定的资源经服务器端解析后返回响应内容 GET请求的数据会附在URL后面 2 POST 用于发送包含用户提交数据的请求 有可能对服务器的数据进行更改 POST的数据放在
  • VS更改默认打开保存编码gb2312

    File 文件 gt Preferences 首选项 gt Usersettings 设置 搜索 encod 或者 encoding 然后修改为想要的编码格式
  • Modern C++的应用,实现golang中的defer

    modern C 实现 golang 的defer 关于RAII的一些思考 defer 的简介 注 没有 golang 语法基础的读者可以看看 反之 可以跳过 golang语法中的defer是什么 defer用来声明一个延迟函数 把这个函数