标准库的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类型 存在二义性