operator 的两种用法
2024-08-27 01:07:21
C++,有时它的确是个耐玩的东东,就比如operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换)。
1、操作符重载
C++可以通过operator实现重载操作符,格式如下:类型T operator 操作符 (),比如重载+,比如下面这个例子
template<typename T> class A
{
public:
const T operator+(const T& rhs)
{
return this->m_ + rhs;
}
private:
T m_;
};
又比如STL中的函数对象,重载(),比如下面这个例子
template<typename T> struct A
{
T operator()(const T& lhs, const T& rhs){ return lhs-rhs; }
};
2、 操作隐式转换
C++可以通过operator实现重载隐式转换,格式如下: operator T (),其中T是一个类型,比如下面这个例子
class A
{
public:
operator B*() { return this->b_; }
operator const B*() { return this->b_; }
operator B&() { return *this->b_; }
private:
B* b_;
};
A a;
当if(a),编译时,它转换成if(a.operator B*()),其实也就是相当于 if(a.b_)
最新文章
- MongoDB学习笔记系列
- [AIR] 打开我的电脑
- T-SQL 查询、修改数据表
- rar 命令
- O(N)时间的排序
- Eclipse支持Jquery代码提示(JqeuryWTP)
- 科普:WiFi是谁申请的专利?高通吗?错!
- sharepoint站点锁定后解锁
- semaphore实现浏览器的读写原理
- 获取一个gridcontrol的数据行数
- 关于 API
- exec与match方法的区别
- href=#与href=javascript:void(0)的区别
- 消息中间件——RabbitMQ
- opencv学习之路(5)、鼠标和滑动条操作
- axios的学习与使用
- Python 获取秒级时间戳与毫秒级时间戳
- 【spring cloud】【IDEA】【Maven】spring cloud多模块打包,打包的jar包只有几k,jar包无法运行,运行报错:no main manifest attribute, in /ms-eureka.jar
- MariaDB快速选择最适合您的需要的存储引擎
- spring3: 对JDBC的支持 之 关系数据库操作对象化