关于一个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