关于C#:文字字符串和函数返回值是左值还是右值?

Are literal strings and function return values lvalues or rvalues?

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

  • 函数的返回值是左值还是右值?

  • 你怎么区分?


  • 字符串文本是lvalue,但不能更改它们
  • 右值,但如果它是指针且非空,则它指向的对象是左值
  • c标准将原来的左右两个术语识别为L = R中的左右两个;但是,它表示将lvalue作为定位值,这大致意味着你可以得到一个对象的地址,因此该对象有一个位置。(见C99中的6.3.2.1。)

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


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


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