左右值@二篇
什么是左值关于左值右值用几句话其实也能表达, 左值是具有地址(在内存中)的值。由于所有变量都有地址,因此所有变量都是左值。之所以使用左值,是因为左值是赋值语句左侧唯一的值。当我们进行赋值时,赋值运算符的左侧必须为左值。
什么是右值
右值是指可以分配给左值的任何值。总是评估右值以产生单个值。 右值的示例是文字(例如5,其结果为5),变量(例如x,其结果为最后分配给它的值)或表达式(例如2 + x,其结果为该值) x+2)。
程序代码:
int y; // define y as an integer variable y = 4; // 4 evaluates to 4, which is then assigned to y y = 2 + 5; // 2 + 5 evaluates to 7, which is then assigned to y int x; // define x as an integer variable x = y; // y evaluates to 7 (from before), which is then assigned to x. x = x; // x evaluates to 7, which is then assigned to x (useless!) x = x + 1; // x + 1 evaluates to 8, which is then assigned to x.
不过可以通过& 和const进行左右值的转化
关于表达式与表达语句
什么是表达式
表达式 是文字,变量,运算符,和显示函数调用的组合,他们产生单个输出值
执行表达式时,将对表达式中的每个术语进行求值,直到剩下单个值为止(此过程称为求值)。 该单个值是表达式的结果。
根据c++标准 表达式是运算符及其操作数的序列,用于指定计算。
表达评估可能会产生结果(例如,2 + 2的评估会产生结果4),并且可能会产生副作用(例如std :: printf(“%d”,4 )的评估会在标准字符上打印字符'4'输出)。
例如
4, 'a', "Hello".是表达式的值 2 + 3, x + 4是表达式
所以我认为左值不是表达式,右值大部分是表达式(当然有错误可以指出来)
表达式语句是由一个表达式和一个分号组成的语句。 执行该语句时,将对表达式进行求值(并且将舍弃表达式的结果)。
int x=5+4;这一句是表达式语句
如果对舍弃表达式的结果不明白
就拿上面表达式语句举例吧
5+4=9会把最后的值9赋值给x,然后丢掉表达式的结果
在c++表达式语句有可能很有用,有可能很没用,在c中应该是同样的吧
比如
3+2;是个很没用的表达式,因为在执行他的时候将会丢掉5
int x=5+4;是个很有用的表达式,当9丢掉的时候但是已经分配给x使用了
在c++中
如何看待cout<<1+2;呢?
直接复制。。。
堆积在CPU上或压入堆栈(RAM)。
如果将值压入堆栈,则@std :: cout.operator <<完成后将弹出该值。 请注意,堆栈没有与RAM中的其他值混合。 它有自己的保留空间。
2)
1和2不在内存中。 该表达式是在编译时求值的,因此3与构成您代码的字节一起存储。 它不与其他值混合,因为代码在RAM中获得了自己的空间。 根据调用约定,将3压入堆栈或保留在CPU上。