左值和右值.cpp

/*左值/纯右值/将亡值(后两者统称为右值)
 *左值可放在运算符左右两侧,右值只能放在运算符右侧
 *其中纯右值主要包括常量,将亡值主要指临时变量,左值主要指定义的具名变量
 *被const修饰的变量也是右值
 * */
# include <iostream>
using namespace std;
int main()
{
    int x_ = 3;
    int y_ = 7;
    int z_;
    int* p_ = NULL;
    int* q_ = NULL;
    int* r_ = NULL;
    int* s_ = NULL;
    int* t_ = NULL;
//-----------------------------//
    int a, b, c;

     a = 5;  
     a = x_;
    // x_ + y_ = a;//不合法,x_+y_为将亡值
     a = x_ + y_;
    // 5 = a;//不合法5为常量
     const int d = a;
    // d = 5; //不合法,d被const修饰后变为常量,不能做左值
     c = d;
     p_ = &a;
     p_ = new int;//p指向空时,内存并没有分配空间,使用指针时要重新申请
     *p_ = 5;
#if 1
     q_ = new int;
     *q_ = *p_;
#else
     q_ = p_;
#endif
     r_ = &a;
     s_ = r_;
    // &a = s;//不合法,&a为地址常量,不能做左值
     cout << *q_ << endl;
     cout << *r_ << endl;    
     cout << *s_ << endl;
     cout << "-------------------" << endl;
     int* p0 = NULL;
     const int* p1 = NULL; //底层const 表示指针指向一个常量,不能修改,相当于只读
     int* const p2 = NULL; //顶层const 表示指针本身是个常量,不能改变
     const int* const p3 = NULL;

     p0 = new int;
     p1 = new int;
     p0 = &y_;
     p1 = &y_;
     cout << *p0 << endl;
     cout << *p1 << endl;
     cout << "-------------------" << endl;
     // p2 = &y_; //不合法,p2是常量,不能做左值
     // p3 = &y_; //不合法,p3是常量
     t_ = new int;
     t_ = &a;
     *p0 = 5;
     // *p1 = 5; //不合法,p1为变量,但p1指向的值为常量
     cout << *p0 << endl;
     cout << "-------------------" << endl;

    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值