第五次复习

1.一些注意点
1.1函数赋值必须按照从右向左原则如:
play( i = 0 ; k ; l = 1 ) //出错
1.2 防止用户输入内容超过数组长度的解决办法
while(i<n&&str[i]); //后面判断函数数组是否达到/0;
2.函数重载

double a ( int );
double a ( double ) ; 
int a ( int ) ; //歧义声明,错误
int a ( const double ) ; //重复声明,错误
int a ( const &double) ; //引用类型,正确重载
double a( double * ) ;
double a ( const double*) ;//基于传入指针所指向数据的类型的重载
double a ( int* ) ; 
double a ( int* const ) //这里定义将传入指针要是const ,为重复重载

2.1任何程序有且仅有一个main函数的实例,main函数不能重载。
2.2对于函数重载来说,它们应该在形参数量和形参类型上有所不同。
3.3如果两个函数声明的返回类型和形参表完全匹配,则将第二个声明视为第一个的重复声明。
3.4如果两个函数的形参列表相同(参数个数和类型)相同但是返回类型不同,那么第二个函数的声明将会出现编译错误。
3.5对于指针形参也是如出一辙。
3.6不能基于指针本身是否为const来实现函数重载。
4.函数模板
简单说就是在函数定义和声明前加上

template<typename T > //类的定义里会用到的class
T a ( t c , t d ) ;
T a(T &c , T & d ) ; 
T a ( T  c ; T d ; T g ) ; // 模板也可以用于重载

4.1优先度:
显式具体化>普通模板
显式具体化<非普通模板
隐式具体化=普通模板函数

template< >void add<int> (int& , int & ) ;
template< >void add<int> (int& , int & ) {} ; //主要作用在产生优先关系时

4.2对于给定的函数名,可以有非模板函数、模板函数和显式具体化函数以及它们的重载版本
4.3编译器对模板的选择
@1 提升转换,如:char/shorts->int||float->double
@2标准转换,如:int->char||long->double
@3人工选择:

	/**如果有less<>(int,int)函数//显式具体化
	想要调用它 less(a,b) ;
	但是有了less(int,int)函数 */
	less<>(a,,b) ; //强制调用显式具体化
	less<int>(a,b)//强制转换ab并调用显式具体化

5.关键字decltype

auto h(int a  ,float b ) ->double ; // 指定返回类型
template < typename T >
auto h (T a , T b ) - > decltype(x+y) ; // 自动推断x+y的类型
//c++11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值