当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,