C++查漏补缺

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值