类型转换重载(conversion operators)
以前在看<windows核心编程>的时候,看到一个很奇怪的重载:operator Proc* ()
那时对c++了解得还不多,看到这个写法费解了老半天,没有参数,没有返回值,有些析构函数的范儿。
又带着个奇怪operator关键字,想必是做和操作符重载相关的东西。
后面了解到,其实是用来做类型转换的,定义这个类被强制类型转换为某种类型时,所发生的行为和结果。
class con { public: operator const char* () const { return "hello world"; } } con var; const char* str = (const char*) var; cout << str << endl; //hello world.
这种写法在某些情况下很有用,但一般来说,用得不多。
我自己对这些技巧一直也没有太多兴趣,隐隐觉得,类型转换在面向对象的世界里,本就是应该规避的,这样的写法岂不相悖?
总之不够名门正宗,不用也罢。
前些天看到篇流传比较广的老文章:http://www.drdobbs.com/cpp/generic-change-the-way-you-write-excepti/184403758?pgno=3
里面介绍了后面被广泛引用的ScopeGard的概念与实现。
其中在实现对Reference的操作时写了一段这样的代码:
template <class T> class RefHolder { T& ref_; public: RefHolder(T& ref) : ref_(ref) {} operator T& () const { return ref_; } }; template <class T> inline RefHolder<T> ByRef(T& t) { return RefHolder<T>(t); }
其中这一行:operator T& () const
让我在读代码的过程中,脑袋又卡壳了一下。忽然想起不久前,在看boost share_ptr时看到的与reference 相关的东西,囫囵吞枣,曾经十分模糊的,现在一下就亮了。到底技术在某些方面其实是殊途同归的,旁门左道的技巧,或许让人迷恋,或许让人误入岐途,就看是谁在哪种场合使用罢了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现