自认为对C++比较熟悉,突然看到一些奇怪的代码(在看网上下载的代码Sockets):

class SocketAddress
{
public:
virtual ~SocketAddress() {} /** Get a pointer to the address struct. */
virtual operator struct sockaddr *() = 0; /** Get length of address struct. */
virtual operator socklen_t() = 0; /** Compare two addresses. */
virtual bool operator==(SocketAddress&) = 0; /** Set port number.
\param port Port number in host byte order */
virtual void SetPort(port_t port) = 0; /** Get port number.
\return Port number in host byte order. */
virtual port_t GetPort() = 0; /** Set socket address.
\param sa Pointer to either 'struct sockaddr_in' or 'struct sockaddr_in6'. */
virtual void SetAddress(struct sockaddr *sa) = 0; /** Convert address to text. */
virtual std::string Convert(bool include_port) = 0; /** Reverse lookup of address. */
virtual std::string Reverse() = 0; /** Get address family. */
virtual int GetFamily() = 0; /** Address structure is valid. */
virtual bool IsValid() = 0; /** Get a copy of this SocketAddress object. */
virtual std::auto_ptr<SocketAddress> GetCopy() = 0;
};

奇怪的代码:

/** Get a pointer to the address struct. */
virtual operator struct sockaddr *() = 0; /** Get length of address struct. */
virtual operator socklen_t() = 0;

最后搜了一下,才知道是对 类型转换 的重载!

socklen_t 是 int 类型 ;

声明:operator XX(); 无返回值,XX就是某个类型;

用法:XX a = (XX)obj; 假设上边SocketAddress非abstract类,例如:SocketAddress sa; int a = (socklen_t)sa; 也就是此时会调用原成员函数operator XX(); 一般返回XX类型值,可以理解成类型转换的重载!

另外:我竟不知道一个自定义类的 构造函数可以用作隐形的类型转换,例如:Class A { A(int i) { val = i};  private int val;} , A a = 5; 解:5 首先通过构造函数A(int)隐形的转换为A类型,然后调用默认的operator=赋值函数,赋值给a;

C++ operator 的一种不会的用法的更多相关文章

  1. 四种Java线程池用法解析

    本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...

  2. operator 的两种用法

    C++,有时它的确是个耐玩的东东,就比如operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).1.操作符 ...

  3. 几种Position属性的用法

    几种Position常见的属性就是一下几种: 1.static:默认值.没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明). 2.re ...

  4. STL_iterator迭代器(2)——几种迭代器对象的用法

    要学会使用迭代器和容器以及算法,需要学习下面的新技术. 一.流和迭代器 本书的很多例子程序使用I/O流语句来读写数据.例如: int value; cout << "Enter ...

  5. Java 四种线程池的用法分析

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...

  6. 解说cocos2d-x几种画图方法的用法与思考

    CCRenderTexture 自己的理解 CCRenderTexture类似一张空白的“画布“,用户通过自定义笔刷(CCSprite*),在touch事件中把笔刷的移动痕迹“记录”起来,从而“画”出 ...

  7. fiddler几种功能强大的用法

    参考网址: http://caibaojian.com/fiddler.html http://www.cnblogs.com/tangdongchu/p/4178552.html 1.fiddler ...

  8. pageContext中page、request、session、application四种范围变量的用法。

    在PageContext中有很多作用域 第一种:PageContext.PAGE_SCOPE适用于当前页面的作用域,其接受数据的代码是pageContext.getAttribute();访问页面也是 ...

  9. tensorFlow 三种启动图的用法

    tf.Session(),tf.InteractivesSession(),tf.train.Supervisor().managed_session()  用法的区别: tf.Session() 构 ...

随机推荐

  1. Bootstrap v4.0.0-alpha.5 发布,大量更新

    Bootstrap v4.0.0-alpha.5 发布了,Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的 ...

  2. Java Json Object 互转

    官方网址: http://json-lib.sourceforge.net/ 需要准备的jar包 1. json-lib-2.4-jdk15.jar        目前最新版, 下载地址  http: ...

  3. 数论学习笔记之解线性方程 a*x + b*y = gcd(a,b)

    ~>>_<<~ 咳咳!!!今天写此笔记,以防他日老年痴呆后不会解方程了!!! Begin ! ~1~, 首先呢,就看到了一个 gcd(a,b),这是什么鬼玩意呢?什么鬼玩意并不 ...

  4. Empty 和空字符串区别

    如果 var 是非空或非零的值,则 empty() 返回 FALSE. 换句话说,"".0."0".NULL.FALSE.array().var $var; 以 ...

  5. SSH中,使用Filter拦截直接访问JSP页面!

    话不多说,直接上代码 创建一个Filter类 package com.weibo.util; import java.io.IOException; import javax.servlet.Filt ...

  6. Android Studio 个人常用设置

    1.主题 Darcula主题真的看起来舒服很多呢: 2.常用快捷键 "Toggle Case" "Quick Documentation" "Refo ...

  7. 【LeetCode OJ】Binary Tree Zigzag Level Order Traversal

    Problem Link: https://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ Just BFS fr ...

  8. flash上传控件跨域

    工作中需要使用百度开发的ueditor,但服务器部署中前端代码和后端代码在不同的域名下,现已解决的前端调后端代码的跨域问题.可是,ueditor中的上传图片flash控件也涉及跨域问题,经过查找发现可 ...

  9. C# 的各种排序

    http://www.cnblogs.com/jiajiayuan/category/302446.html

  10. vs2013提高编译速度

    最近做新的项目,很多库是之前项目积累下来的库.在windows下使用的IDE是vs2013,整体编译的时候,明显感觉编译速度较慢,文件是一个一个编的. 从编译器本身的角度,vs2013是提供了加快编译 ...