C++中操作符的左右值问题
题目可能不贴切,这里说明一下,本文讨论的是C++中操作符作用于操作数产生的的值是左值还是右值的问题。本文是受++i在C、C++中是不是左值?一文启发而作。下面的代码都是在VC++ 6.0环境下测试的。若有错误,欢迎指正!
1)赋值操作符产生左值
view plaincopy to clipboardprint?#include <stdio.h>
int main()
{
int i=0;
(i=2)=3;
printf("%d\n",i);
return 0;
}
#include <stdio.h>
int main()
{
int i=0;
(i=2)=3;
printf("%d\n",i);
return 0;
}
2)复合赋值操作符也产生左值
view plaincopy to clipboardprint?#include <stdio.h>
int main()
{
int i=0;
(i+=2)=3;
printf("%d\n",i);
return 0;
}
#include <stdio.h>
int main()
{
int i=0;
(i+=2)=3;
printf("%d\n",i);
return 0;
}
3)逗号操作符可以产生左值也可以产生右值,取决于看逗号表达式的最后一个操作数是左值还是右值
view plaincopy to clipboardprint?#include <stdio.h>
int main()
{
int i=0;
int j=0;
(i,j)=3;
printf("%d\n",i);
printf("%d\n",j);
//error C2106: '=' : left operand must be l-value
// (i,3)=4;
return 0;
}
#include <stdio.h>
int main()
{
int i=0;
int j=0;
(i,j)=3;
printf("%d\n",i);
printf("%d\n",j);
//error C2106: '=' : left operand must be l-value
// (i,3)=4;
return 0;
}
4)前置自增自减操作符产生左值,后置自增自减操作符产生右值
view plaincopy to clipboardprint?int main()
{
int i=0;
//error C2106: '=' : left operand must be l-value
// i++=5;
++i=5;
//error C2106: '=' : left operand must be l-value
// i--=5;
--i=5;
return 0;
}
int main()
{
int i=0;
//error C2106: '=' : left operand must be l-value
// i++=5;
++i=5;
//error C2106: '=' : left operand must be l-value
// i--=5;
--i=5;
return 0;
}
5)'*' ',' '.' '->'和'[]' 也可以产生左值。
6)算术操作符,关系操作符,位操作符,逻辑操作符等产生右值。
本文漏掉了一些操作符,读者可以自行测试或参阅资料,呵呵,。
作者“quarryman”
补充:软件开发 , C++ ,