175-C++重要知识点6

1.下面的结果各是什么?

int i = 0;
i = i++ + 1;

Int a = 0;
a = a++ + 1;

和编译器有关,有的编译器上面输出的结果为2,++是后置++,所以i还是0,然后加1,把结果1赋值给i,i变为1,然后再执行++,所以最终i的结果为2

下面的输出的结果为1,++是我们重载的运算符,返回的值是a的旧值,也就是0,所以结果为1

2.请问下面程序输出d.value的值是多少?

Int& operator++(int)
{
	static Int old = * this;
	old = * this;
	++* this;
	return old;
}
int main()
{
	Int a(10);
	Int b = a++;
	Int& c = a++;
	c = c + 100;
	Int d = a++;
}

static Int old = * this;语句只执行一次,执行完Int a(10);后a.value的值为10,执行完Int b = a++;以后,b.value的值为10,a.value的值为11,执行完Int& c = a++;以后c.value的值为11,a.value的值为12,此时c是old的引用,old的值为11,执行完c = c + 100;以后old的值为111,但是在执行Int d = a++;时,用a.value的值去赋值old,old的值变成了12,最终a.value的值为12

一般情况下不要在函数里面轻易定义静态变量,也不要轻易使用银行用返回,如果当一个函数作为引用返回时,用引用接收必须要有原因,否则不要使用引用接收,最好使用值接收

3.a = a++ + 1的解析过程

  Int a = 0;
  a = a++ + 1;
//a = a.operator++(0) + 1;//0用于区分调用后置++,不一定是0,只要是int类型就可以
//a = operator++(&a,0) + 1;
//a = operator++(&a,0).operator+(1);
//a = operator+(&operator++(&a,0),1);
//a.operator=(operator+(&operator++(&a,0),1));
//operator=(&a,operator+(&operator++(&a,0),1));

执行完operator=(&a,operator+(&operator++(&a,0),1));中(&operator++(&a,0)以后此时的a为1,然后拿返回的旧的对象(a为0)和1相加后的值为1,然后把相加后的结果赋值给a对象,所以a值从0变成1之后,又用1给a赋值,所

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值