文字字符串和函数返回值是左值还是右值?

Tim*_*Tim 30 c rvalue lvalue

  1. 只是想知道文字字符串是左值还是左值.其他文字(如int,float,char等)是左值还是右值?

  2. 函数的返回值是左值还是右值?

你怎么说出差异?

小智 40

  1. 字符串文字是左值,但你不能改变它们
  2. rvalue,但如果它是一个指针而且非NULL,则它指向的对象是一个左值

C标准承认左侧右侧的原始术语,如L = R; 但是,它会将左值视为定位器值,这大致意味着您可以获取对象的地址,因此该对象具有位置.(见C99中的 6.3.2.1 .)

出于同样的原因,标准已经放弃了术语rvalue,只使用"表达式的值",这实际上是一切,包括文字,如整数,字符,浮点数等.另外,你可以用右值做任何事情也可以用左值完成,所以你可以把所有左值都想象为右值.

  • +1简称正确答案.我不知道C标准在任何地方都没有使用"rvalue",但事实上就是这样(只是进行了搜索!).C++的另一个有趣的区别.我有一天克服的另一个问题是函数指示符是C中的rvalues,而它们是C++中的左值.所以C中的'op&`可以应用于某些rvalues - 指定函数的rvalues. (2认同)