关于一个C++问题:a,b,c为整形变量,语句c=b++=a++;错在哪?

来源:百度知道 编辑:UC知道 时间:2024/07/13 07:48:44
知道了

首先对于i++的实现是:

int temp;

temp = i;
i = i+1;
return temp;
而++i的实现是:
i = i+1;

return i;

在c++中左值只能是一个变量,不能是一个表达式。

b++不能作为左值,即b++不能作为等号左边的值

要实现这句话的意思,可以这样:

c=b=a++;
b++;

后自增是返回加1之前本身的值。因为b=(b++);

另外,作为右值要先初始化

i++的实现是:

int temp;

temp = i;
i = i+1;
return temp;

而++i的实现是:
i = i+1;

return i;

所以对于我们提出来的问题已经能得到解决了:

i++=3; 是错误的是因为i++返回的是编译器自动分配的临时变量temp,而这个temp并不是你程序中定义的可寻址变量的引用,也就是说你不能通过地址对它进行操作.(换句话说就是不能作为左值)

++i=3;是正确的就是因为其返回值就是i;

另外:关于i++和++i的效率问题:按上面分析来说,++i的效率是比i++效率高些的.(VC)对于内置(built-in)类型,写++变量和变量++编译器都经过优化,采用++变量的方式.但是对于自定义类对象如果重载先++,和后++操作符那么要使用先++,因为这时编译器,不可能对你的类型进行优化!

错在b++=;
=号左边必须是值
改成
c=++b=a++;

b++= 这句话有歧义,可能理解成b+ +=a++
也有可能理解成b++ = a++
这样时对的
#include <io