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

本文探讨如何利用Modern C++的特性,如auto, lambda, 右值引用等,来实现类似Golang中的defer功能。通过具体实现和示例,展示了在C++中如何在函数返回前执行特定操作,模拟defer的功能。" 132785119,19671763,超像素模糊聚类算法:彩色图像分割实践,"['图像处理', '计算机视觉', '聚类算法', 'MATLAB编程', '图像分割']
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值