C++ Primier读书笔记(第六章2)

顶层的const在重载时无法相互区分,底层的可以

void lookup(int i)
{

}
void lookup(const int i)
{

}

void lookup(int* i)
{

}
void lookup(int* const i)
{

}
//重复声明

void lookup(char& ch)
{

}
void lookup(const char&)
{

}

void lookup(char *ch)
{

}
void lookup(const char*ch)
{

}

对于那些只存在const差异的函数,尝试用const-cast重用代码。

const string &shorterString(const string &s1, const string &s2)
{
    return s1.size() > s2.size() ? s1 : s2;
}

string &shorterString(string &s1, string &s2)
{
    auto &r = shorterString(const_cast<const string&>(s1),
        const_cast<const string&>(s2));
    return const_cast<string &>(r);
}

如果我们在内层作用域之中声明名字,他将隐藏外层作用域中声明的同名实体。在不同的作用域中无法重载函数名。(思想:函数也是变量)

assert(expr),如果expr的值为假,则输出错误提示信息。并终止程序。
在默认情况下。NDEBUG是没有被定义的宏,如果定义了,那么assert将不会有任何作用。

FILE当前文件名的字符串字面值
_LINE当前行号的整形字面值
TIME文件编译时间的字符串字面值
DATE文件编译日期的字符串字面值

最佳匹配等级:
1.精确匹配:①实参类型和形参类型相同②实参从数组类型或函数类型转换为相应的指针类型③向实参添加或删除i当即const
2.通过const转换实现的匹配
3.通过类型提升实现的匹配
4.通过算数类型转换或指针转换实现的匹配
5.通过类类型转换实现的匹配

void func(long)
void func(float)
func(3.14)
//都需要实现类型转换,存在二义性,不同的类型转换之间没有优先度

函数指针

bool (*pf)(const string&,const string &);
pf=lengthshorter;
pf=&lengthshorter;//两种写法都可以
pf(str1,str2)
(*pf)(str1,str2);//两种等价调用
//调用指针形参
void usebigger(const string &s1,const string &s2,bool (*pf)(const string &,const string &));
void usebigger(const string &s1,const string &s2,bool pf(const string &,const string &));
//等价声明
//返回函数的指针
int (*f1(int))(int*,int);
auto f1(int)->int(*)(int*,int);
//返回一个指针,这个指针指向一个函数,函数的参数是一个整形指针和整形,返回值是一个整形
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值