利用operator实现隐式类型转换的简单应用

【operator】operator T() 定义隐式类型转换 operator 用法之一 阅读详情

最近在网上看到关于利用operator进行隐式类型转换的方法,示例如下:
class A
{
    public: 
    operator bool(void) 
    { 
        return b; 
    }
private: 
    bool b;
};
 
void main(void)
{ 
    A a; 
    bool b; 
    if(a) 
    { 
        b = ! a; 
    }
} 

这样的话类A 可以直接当作bool使用,这种方法在对一些基本类型的封装非常有效。
我们知道在使用new分配对内存的时候,很容易忘记回收造成内存泄漏,在C++标准模板库中建议使用std::auto_ptr或者boost::shared_ptr智能指针来达到自动释放内存的效果。但对于不是释放内存而像HANDLE这样使用完需要CloseHandle的数据类型,使用智能指针的话最后并不能自动调用CloseHandle。用这种隐式转换的方法对HANDLE进行一次封装,在析构函数中调用CloseHandle,这样在对象析构的时候可以达到自动CloseHandle的目的。看下面的代码实现:

#include "stdafx.h"
#include <windows.h>
#include <string>
#include <vector>

class MyHANDLE
{
public:
 MyHANDLE( HANDLE _handle ): handle( _handle ){}
 ~MyHANDLE()
 {
  if ( handle != NULL )
  {
   CloseHandle( handle );
  }
 }

 operator HANDLE();
private:
 HANDLE handle;
};

int _tmain(int argc, _TCHAR* argv[])
{
 std::string test = "testHandle";

 MyHANDLE handle( ::CreateMutex( NULL, TRUE, reinterpret_cast<LPCWSTR>(const_cast<char*>(test.c_str())) ) );
 //当变量被释放时自动调用析构函数并执行CloseHandle。
 return 0;
}

 

 

http://joyloft.net/?p=484
http://www.adintr.com/program/article/05.oper.html
http://www.pconline.com.cn/pcedu/empolder/gj/c/0503/581281.html

CMake、Make、MinGw、Clang、Llvm、GCC、MSVC的区别 除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具;的缩写,MinGw是windows版本的gcc集合。并不仅是一个 C/C++ 编译器,而是一套。是微软开发的VC运行时库,3、Make和CMake是。 阅读详情

相关推荐

用Matlab系统辨识工具箱搞定温控系统建模:从阶跃响应到传递函数(附完整代码)

本文详细介绍了如何使用Matlab系统辨识工具箱进行温控系统建模,从阶跃响应数据采集到传递函数参数辨识的全过程。通过实际案例和完整代码,帮助工程师快速掌握PID控制参数整定技巧,提升温控系统设计效率。特别适合单片机开发者和自动化控制工程师参考。

weixin_30736301的博客 309

operator算子&隐式类型转换

文章目录1. 操作符重载2. 隐式类型转换2.1 构造函数的隐式类型转换2.2 operator 算子的隐式类型转换2.3 两种隐式类型转换的比较3. 参考资料 对于 operator 运算符,除了常用的 operator overloading(操作符重载)之外,还有 operator casting(操作隐式转换)的用法。 1. 操作符重载 c++可以通过operator实现重载操作符,格式如下:return_type operator operand (parameter list),比如重载+

To the beyond and infinity! 820

VerilogEval实战指南:从基准测试到模型微调的全流程解析

本文提供了VerilogEval实战指南,详细解析了从基准测试到模型微调的全流程。VerilogEval是一个自动化、标准化的测试框架,用于客观评估大语言模型生成Verilog硬件代码的能力。文章涵盖了环境搭建、核心机制解析、利用其生成合成数据进行模型微调的策略,以及如何将其工程化集成到自动化评估流程中,为硬件设计领域的AI应用提供了完整的方法论。

yy01234的博客 1005

c++中的operator的用法

在C++中,操作符重载(operator overloading)允许您为您自定义的类创建操作符的特定行为。需要注意的是,隐式类型转换可能会导致代码可读性和意图的不明确,因此要小心使用,以避免不必要的歧义和错误。这使你能够创建可调用对象,用于各种不同的情况,例如函数对象、函数指针和函数回调。你可以根据你的需求,重载不同的运算符来定义自定义类型之间的操作。运算符,你可以使一个对象的实例就像一个函数一样被调用。是加法运算符的重载形式,它允许你为自定义的类或类型定义加法操作。在上面的示例中,我们创建了一个名为。

shy2333的博客 9106

Unity零基础到入门 ☀️| 小万字教程 对 Unity 中的 协程 ❤️全面解析+实战演练❤️

Unity,为了让Unity基础知识专栏更加完善,又肝了一篇协程来学习。 协程在Unity中还是很常用的,一起来看一下协程的基本概念和使用方法吧!

努力前行,总会成为自己心中的那道光 8万+

基于YOLOv10的机器人抓取引导系统:从物体检测到精准抓取

python# 数据标注工具简化版import os"""启动标注工具""""""标注单张图像"""print(f"标注图像: {os.path.basename(img_path)}")print("请在图像上绘制抓取矩形框...")# 这里应该实现交互式标注界面# 简化版本直接返回示例标注# 示例标注数据"""保存标注结果"""# 保存为YOLO格式# 转换为YOLO格式。

YOLO 377

operator的两种用法(重载和隐式类型转换)

当然了,构造函数的隐式类型转换有利有弊,类的设计者就起决定性作用了,如果你不想让构造函数发生隐式的类型转换,请在构造函数前加explicit关键字;Test1类型的对象传入string的构造函数,是用了c++构造函数的隐式类型转换特性,虽然string类并没有显式定义参数为Test1的构造函数,但因为其可以隐式转换为string,所以语法上都是合法的。构造函数的隐式类型转换,是使用一个其他的类型构造当前类的临时对象并用此临时对象来构造当前对象,这种转换必须有构造函数的支持;

AGNING的博客 655

芒果YOLO11改进17:即插即用 | 损失函数Repulsion Loss|Repulsion 解决目标遮挡场景下的目标检测,为解决密集人群检测中遮挡设计的损失函数,打造高效

即插即用 | 损失函数Repulsion Loss|Repulsion 解决目标遮挡场景下的目标检测,为解决密集人群检测中遮挡设计的损失函数,打造高效

包括YOLOv5、YOLOv7、YOLOv8等模型改进 482

C++ 中operator用法:隐式类型转换

C++中的operator主要有两个作用,一是操作符的重载,一是操作符的转换。对于操作符的重载,许多人都不陌生,用以下这个小例子温故一下: class A {     public:     A operator +(A& oa){A a;a.num=oa.num+num;return a;}     int num; }; int main(int argc,char* argv[])

honpey爱编程 6367

NXP(恩智浦)—TJA1043TK CAN收发器芯片详解

本文章主要讲解NXP(恩智浦)—TJA1043TK CAN收发器的相关知识。

零零刷的博客 2201

RK3568平台(camera篇)点亮imx586摄像头

mipi摄像头硬件确认点:1.供电:5V,2.8V,1.2V,1.8V,reset脚(硬拉3.3,上电的时候从低到高),pwron脚外接3.3V。2,时钟:MCLKOUT是24兆时钟。3.4组差分mipi线。mipi的data线的波形为方波。

weixin_49303682的博客 7257

C++——隐式类型转换

先看一下隐式类型转换如何发生吧: 我们定义了一个很简单的类,它的构造函数使用了默认参数(),这时main函数里的两句都触发了构造函数的隐式调用很显然,函数需要的是类型的参数,而我们传入一个数据,这个程序能够成功运行,并且成功输出说明隐式调用了构造函数。另外需要注意的是,在对象刚刚定义的时候,使用赋值操作符,调用的是构造函数,而不是运算符这种悄然发生的事情,有时可以带来便利,让你的程序可以继续运行,而更多的会带来很多意想不到的结果,关键字用来避免这样的情况发生c++11中对explicit的解释为指定构造函数

Lineng's blog 2106

嵌入式工程师必学(9):USB 3.0协议理解

USB3.0和USB2.0相比,在线缆上从4根线(Vbus、GND、D+、D-)变为了8根线(Vbus、GND、D+、D-、SSRX+\SSRX-\SSTX+\SSTX-),可见增加的4根线都是和超速相关的,新增加的超速有两类,分别为:超速Gen1(5.0Gbps),超速+Gen2(10Gbps),还兼容USB2.0的3类速率:low-speed(1.5Mbps),full-speed(12Mbps),andhigh-speed(480Mbps)。从设计可以看出,USB3....

码农17年的博客 1万+

C++隐式类型转换 operator T

对于operator关健字用于运算符重载这我们都知道,其实operator还有另外一种作用:强制类型转换。上一周为了对应项目中一个问题,同事帮助写了一个类,使用到了operator的强制类型转换作用,后来source review的时候几个leader也不明白其作用,问我是怎么回事,当时我也只是一知半解,无奈解析了半天更天也没有让leader明白,汗。。。后来让这们同事来解析才清楚。     下

micx0124的专栏 1526

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

operator的两种用法

C++ operator两种用法 C++中的operator,有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。下面分别进行介绍: 1、操作符重载 **C++**可以通过operator实现重载操作符,格式如下:类型T operator 操作符 (),比如重载+,比如下面这个例子 template<typenam...

qq_28306881的博客 7873

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++ 用operator实现隐式类型转换

Operator用于C++的运算符重载,同时也可用于隐式类型转换,看下面这个例#include &lt;iostream&gt; template&lt;typename _T&gt; class A { public: A(_T a) : data(a) {} operator _T () { return data; } private: _T data; }; int main() ...

wudi_X的博客 1494

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C++隐式类型转换 operator T()

最近研究智能指针,osg::ref_ptr的机制时候发现一个有趣的问题。就是C++智能指针都会提到一点: 由于智能指针是一个对象,所以if (my_smart_object)永远为真,要判断智能指针的裸指针是否为空,需要这样判断:if (my_smart_object.get())。 但是我在写osg的时候,下意识都是直接判定的if(myPtr)也没碰到问题。研究后发现原来是osg::ref_...

Alezan的博客 2978

c++ operator操作符的两种用法:重载和隐式类型转换

C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换。 对于操作符的重载,许多人都不陌生,但是对于第二种的自定义对象类型的隐式转换 ,估计不少人都不太熟悉。我们下面就用以下这个小例子展现一下这两种用法: #include&lt;string&gt; #include&lt;iostream&gt; #include&lt;cstdio&gt; #inclu...

ii0789789789的博客 1066

operator用于隐式类型转换

C++中的operator主要有两种作用,一是操作符重载,二是自定义对象类型的隐式转换。在上面提到的point类中,我们提到如果构造函数没有默认参数,隐式转换的时候就会编译出错,但是如果我们利用operator的第二个作用,就可以自定义隐式转换类型。 #include <iostream> #include <string> using namespace std; ...

多一些不为什么的坚持 468

『C/C++』C++ 中operator用法:隐式类型转换

原文地址:C++ 中operator用法:隐式类型转换 C++中的operator主要有两个作用,一是操作符的重载,一是操作符的转换。对于操作符的重载,许多人都不陌生,用以下这个小例子温故一下: [cpp] view plaincopy class A   {       public:       A operator 

fallenink的专栏 1766

解析隐式类型转换操作operator double() const,带你了解隐式转换危害有多大

你真的懂C++吗?你了解隐式类型转换操作符?你知道为什么C++引入了explicit关键字吗?最常见的构造函数也有你不了解的坑?

林夕07 1518

c++中的operator的作用

今天在看effective c++的时候,看到了一个奇怪的用法 operator FontHandle()const{ return f; } 这一下把我整懵了,在我的脑子里operator只能用于操作符重载啊,乍一看还以为是重载(),仔细一看,这函数没有返回值类型,而且只有一个括号,然后写了两个demo对比了一下。 class demo { public: demo(int a) :a(a...

qq_44111565的博客 1649

c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast

C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换。对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式转换,我们下面就用以下这个小例子温故一下这两种用法: 1 #include <iostream> 2 #include <sstream> ...

CX的blogs 302
上一篇: 如何使用memcpy向容器里拷贝数据
下一篇: ERROR LNK2019
ShenRui
博客等级 码龄20年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值