1.临时变量、引用参数和const
如果实参与引用参数(形参)不匹配,C++将生成临时变量。当前,仅当参数为const引用时,C++才允许这样做。
临时变量使函数在可处理的参数种类方面更通用,这些临时变量只在函数调用期间存在,此后编译器可以随意将其删除。因此,尽可能将引用型形参指定为const。
考虑如下函数定义:
int fun2(int& pi)
{
return pi;
}
因为没有修改pi,所以参数就懒得加const限制,但在其他地方调用次函数时会有限制:非const的引用参数必须用与其类型一致的对象/量来初始化。
也就是说可以这样用:int a=5;b=fun2(a);
这样:int b=fun2(5);是错的。
因为数字5是一个字面值,也就是个右值,而函数要求的是一个具体的int类型的对象/变量,需要左值。
然后这样:long a=5;int b=fun2(a);也不行,类型不一样。
但参数加上const后上两种都是合法的,const引用的参数允许可行的转换,比如fun2(3.14),参数是个浮点,但编译器会转换成int然后调用,要是压根转换不过去那肯定加了const也不行的。
2、另外,即使说,我所有代码为了易读,绝对不会出现字面值这东西,还有个问题。如果你写了个函数为了保护参数加了const,但函数里面调用了另一个参数没const的函数,那么这里估计就要出错,const实参不能传递给非const形参。虽然你能保证自己的代码不冲突,但不能保证别人的代码,尤其是合作的时候每人写一个部分。
3、综上,不需要改动的参数,如果要通过引用传递,全都加上const最安全。
2.打印一个数据的二进制函数
void disbinary(char ch)
{
int i = 8;
while(i--)
{
if((1 << i)&ch)
printf("1");
else
printf("0");
if(i%4 == 0)
{
printf(" ");
}
}
putchar(10);
}