代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

文本字符串和函数返回值是lvalues还是rvalues?

  •  30
  • Tim unnamed eng  · 技术社区  · 15 年前
    1. 只是想知道文字字符串是左值还是右值。其他文字(如int、float、char等)是左值还是右值?

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

    你怎么区分?

    3 回复  |  直到 10 年前
        1
  •  40
  •   Roger Pate    15 年前
    1. 字符串文本是lvalue,但不能更改它们
    2. 右值,但如果它是指针且非空,则它指向的对象是左值

    C标准承认了最初的术语 左边 正确的 如在 L = R 然而,它认为左值是 定位器值 ,这大致意味着您可以获取对象的地址,因此该对象具有一个位置。(参见 C99 。)

    同样,标准已经放弃了“值”这个术语,只使用了“表达式的值”,它实际上是所有内容,包括诸如int、chars、float等文本。此外,可以对值执行的任何操作也可以对值执行,因此可以将所有的值视为值。

        2
  •  4
  •   rishirocks    12 年前

    C中有两种表达式: 1.左值:作为左值的表达式可能出现在赋值的左侧或右侧。 2.第2条。右值:作为右值的表达式可能出现在赋值的右边,但不是左边。 变量是lvalue,因此可能出现在赋值的左侧。数字文本是值,因此可能无法分配,也不能出现在左侧。以下是有效的声明: int g=20; 但以下语句无效,将生成编译时错误: 10=20;

        3
  •  1
  •   t.g.    14 年前

    有一个 definition 对于C++来自微软。根据这个定义, 一个文本字符串,比如说“hello world”,是lvalue,因为它是常量而不是临时的。实际上,它会在应用程序的整个生命周期中持续存在。