C++中operator的另一种用法
本博客所有文字均为原创
转摘请注明出处并给出原文链接
联系方式:ibolow@gmail.com|饭否|豆瓣|Twitter:@JoyLoft


C++中operator的另一种用法

几乎所有的C++教材上都讲了operator在C++中是重载操作符的关键字,但是恕我学业不精,昨天研究C++的语法文件时,才发现这个关键字还可以用来定义隐式的类型转换。

参见如下代码,类A在需要的时候可以自动的转换成bool形。

  1. class A
  2. {
  3. ??? public:
  4. ????? operator bool(void)
  5. ????? {
  6. ????????? return b;
  7. ????? }
  8. ??? private:
  9. ????? bool b;
  10. };
  11.  
  12. void main(void)
  13. {
  14. ??? A a;
  15. ??? bool b;
  16. ??? if(a)
  17. ??? {
  18. ??????? b = ! a;
  19. ??? }
  20. }


Comments (3) left to “C++中operator的另一种用法”

  1. 夜弓 wrote:

    隐式转换有两个办法嘛
    一个就是上面说的operator type_name()
    另外一个是非explict的单参构造函数
    不过依赖隐式转换很容易出问题,而且很难调试
    恐怕只有自己写东西玩,和库作者才会用到

  2. 夜弓 wrote:

    补充一句
    其实上面这样定义出来的还是叫做重载操作符
    应该是,类型转换操作符
    就像C里面常见的(char)iValue一样。
    不过也可以用来进行隐式转换。

  3. 小彬 wrote:

    隐式类型转换可以使用构造函数以及但参数的构造函数
    class type
    {
    int a;
    public:
    type (int b) {
    a = b;
    }
    };

    main ()
    {
    type c = 123; //在此调用的是type的构造函数,自动转换类型。不过只有在初始化对象时才可以
    }
    在函数调用中也行

    void fun(type a)
    {

    }

    main ()
    {
    fun (123); //并没有错误,不过一个前提是函数的形参必须是传值调用而不能引用,并且没有参数为int类型的重载函数,否则会调用参数为int的函数(涉及到候选函数问题)
    }

    顺便说一下,你的主页很有意思

添加评论

(Never published)