是 int & foo();一个左值?

Is int & foo(); an lvalue?

我知道可能还有其他类似的问题,但他们没有完全回答我的问题。

我一直在浏览有关 C++ 类型推导的讲座中的一些幻灯片,在其中一张中我发现了以下语句:

int & foo();           // foo() is lvalue;

起初,我认为这是错误的 - foo 是一个函数,它不能被赋值,它不是一个左值。但现在我想作者可能有不同的想法。也就是说,函数调用可能是一个左值,而不是函数本身。

换句话说:

  1. foo 是左值吗?
  2. foo() 是左值吗?
  3. 函数(不是函数调用)是否可以分配给(即foo = something;)?
  4. "lvalue is every object/thing that can be assigned to" - 这个说法总是正确和准确的吗?

问题 4 需要更多解释。有了它,我试图理解什么是左值。我看到的另一个定义是:"lvalues have storage addresses that can be obtained"。我不确定 storage 地址到底是什么,但以我们的函数 foo 为例 - 我们绝对可以获得 some 地址那个功能。在 C++ 中,它只是函数的名称

foo;   // returns the address of funtion 'foo'

但与此同时,我认为我们永远无法分配给 foo(问题 3)。那么 - 它是不是左值?

如果您回答全部 4 点,我将不胜感激。我将问题标记为 C++ 而不是 C++11 因为我相信该问题适用于该语言的所有版本。但是,如果有任何差异,请指出。

is foo an lvalue?

是的。指定函数的主要表达式是 lvalue。但是,在某些情况下,该函数会隐式转换为指针;该指针是一个 prvalue(或者只是一个 rvalue,在 C++11 之前)。

is foo() an lvalue?

是的。如果结果是 lvalue 引用类型,则函数调用的值是 lvalue,如此处所示。

can a fuction (not a function call) ever be assigned to

没有。只能将可修改的对象分配给。

"lvalue is every object/thing that can be assigned to" - is this statement always correct and accurate?

没有。 lvalue 是一个指定函数或对象的表达式。只有指定了一个可修改的对象,它才能被赋值。