• 重载运算与类型转换


    可调用对象与function

      c++中有几种可调用对象:函数、函数指针、lambda表达式以及重载了函数调用运算符的类。和其他对象一样,可调用的对象也有类型。然而,两个不同类型的可调用对象可能共享同一种调用类型。例如 int(int,int)是一个函数类型,其接受两个int,return 一个int。

      对于几个可调用对象共享同一种调用形式的情况,我们会希望把它们看成具有相同的类型。例如,考虑以下几个不同类型的可调用对象:

    // 普通函数
    int add(int i, int j) { return i + j; }
    
    // lambda, 产生一个未命名的函数对象类
    auto mod = [](int i, int j) { return i % j;};
    
    // 函数对象类
    struct divide {
         int operator() (int deno, int divi) {
               return deno / divi;
        }
    }   

      上述对象共享int(int, int)类的调用形式。我们希望有一个函数表,这个函数表为一个map, key为表示运算符的string, value为对应的函数指针,如下所示:

    map<string, int(*)(int, int)> binops;

    型转换运算符

      类型转换运算符是一类特殊的成员函数,其形式如下所示:

    // 类型转换函数
    operator type() const;
    
    // e.g 转换为int
    operator int() const;

      为了防止隐式的类型转换,c++11引入了显式的类型转换运算符,如下:

    explicit operator int() const {return val;}
    SmallInt si = 3; // right
    si + 3; //wrong need隐式的转换
    static_cast<int>(si) + 3; // right 显示地请求类型转换

      有一个例外情况,在这个情况下显式的类型转换会隐示的使用。这个情况为 表达式用作条件时。

  • 相关阅读:
    Infopath Notify 弹出提示信息
    window.showModalDialog 返回值
    【转】获得正文内容中的所有img标签的图片路径
    Json Datable Convert
    Sharepoint 列表 附件 小功能
    Surgey 权限更改
    SQL 触发器用于IP记录转换
    Caml语句 查询分配给当前用户及当前组
    jquery 1.3.2 auto referenced when new web application in VSTS2010(DEV10)
    TFS diff/merge configuration
  • 原文地址:https://www.cnblogs.com/z1141000271/p/15009435.html
Copyright © 2020-2023  润新知