/*左值/纯右值/将亡值(后两者统称为右值)
*左值可放在运算符左右两侧,右值只能放在运算符右侧
*其中纯右值主要包括常量,将亡值主要指临时变量,左值主要指定义的具名变量
*被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;
}
*左值可放在运算符左右两侧,右值只能放在运算符右侧
*其中纯右值主要包括常量,将亡值主要指临时变量,左值主要指定义的具名变量
*被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;
}