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

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

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

你怎么区分这个区别?

  1. string文字是左值,但是你不能改变它们
  2. 右值,但是如果它是一个非空指针,它指向的对象是一个左值

C标准认可了原来的术语左边右边,L = R ; 然而,它认为左值为locator值 ,这大致意味着你可以得到一个对象的地址,因此该对象有一个位置。 (见C99中的 6.3.2.1)

同样的道理,这个标准已经放弃了右值,只是使用“expression式的值”,其实际上是所有的东西,包括整数,字符,浮点数等文字。另外,任何你可以用右值也可以用一个左值来完成,所以你可以把所有左值视为右值。

C中有两种expression式:lvalue:左值的expression式可以作为赋值的左边或右边出现。 2.右值:作为右值的expression式可以出现在赋值的右侧,但不是左侧。 variables是左值,因此可能出现在任务的左侧。 数字文字是右值,所以不能分配,不能出现在左边。 以下是一个有效的声明:int g = 20; 但以下不是一个有效的语句,并会产生编译时错误:10 = 20;

有一个来自Microsoft的C ++ 定义 。 通过这个定义,一个字面的string,比如“hello world”是左值,因为它是常量而不是临时的。 实际上,它在你的应用程序的整个生命周期中一直存在