首页 > 代码库 > primer Day3

primer Day3

标准库的function类型 function<T> f;

 result_type  该function类型的可调用对象的返回类型  

function<int(int ,int)> f1 

函数名重载的话,不能直接放入function类型的对象中 可以通过存储函数指针的方式来解决这个问题

 

类型转换符:是类的一种特殊成员函数,它负责将一个类类型转化的值转化为其它类型

一般形式如下

  operator type() const ;

类型转换函数必须是类的成员函数; 他不能声明返回类型,形参列表必须为空

class SmallInt{

SmallInt(int i = 0):var(i){

if(i < 0 ) throw std::out_of_range("##########");

}

operator int() const{return val;};

private:

std::size_t val;

}

技术分享

 

 c11 引入显示类型转换运算符

clase SmallInt{

public:

explict operator int() const {return val;}

}

SmallInt si = 3 正确 构造函数不是显示的

si+3 错误 因为这里要发生隐式类型转换 但类的运算符是显示的

static_cast<int>(si) +3 正确

有个例外:表达式被用作条件 显示类型会被隐式执行   if while for等条件部分

 class smallint{

  public:

    samllint operator+(const smallint&,const smallint&);

  public:

    smallint(int = 0) //提供了源为int的类型转换

    operator int() const{return val;};//提供了目标为int的类型转换

  private:

    size_t:: val; 

}

    smallint s1,s2;

      smallint s3 = s1 + s2; //正确 会调用重载运算符的版本

    int a = s3 +0;          //错误  s3可以转化为int类型 0也可以转化为samllint类型 存在二义性

  

 

primer Day3