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

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

你怎么区分?

4

3 回答 3

40
  1. 字符串文字是左值,但您不能更改它们
  2. 右值,但如果它是指针且非 NULL,则它指向的对象是左值

C 标准承认原始术语表示,如L = R; 但是,它说将 lvalue 视为locator value,这大致意味着您可以获得对象的地址,因此该对象具有位置。(参见C99中的 6.3.2.1 。)

出于同样的原因,标准已经放弃了术语 rvalue,而只使用“表达式的值”,这几乎是所有内容,包括诸如 int、chars、float 等文字。此外,您可以使用 rvalue 做的任何事情也可以使用左值来完成,因此您可以将所有左值视为右值。

于 2010-01-10T20:11:01.950 回答
4

C 中有两种表达式: 1. 左值:左值表达式可能出现在赋值的左侧或右侧。2. 右值:作为右值的表达式可以出现在赋值的右侧,但不能出现在左侧。变量是左值,因此可能出现在赋值的左侧。数字文字是右值,因此不能被赋值,也不能出现在左侧。以下是一个有效的陈述: int g = 20; 但以下不是有效的语句,会产生编译时错误:10=20;

于 2013-02-07T13:23:13.633 回答
1

Microsoft 对 C++有一个定义。根据这个定义,文字字符串,比如“hello world”,是左值,因为它是 const 而不是临时的。实际上,它会在您的应用程序的整个生命周期中持续存在。

于 2011-05-25T05:44:07.677 回答