我知道可能还有其他类似的问题,但他们并没有完全回答我的问题。
我一直在浏览关于C++
类型演绎的讲座中的一些幻灯片,其中一个我发现了以下声明:
int & foo(); // foo() is lvalue;
起初,我认为这是错误的 - foo
是一个函数,它不能被赋值,它不是左值。但现在我认为作者可能会有不同的想法。也就是说,函数调用可能是左值,而不是函数本身。
换句话说:
foo
左值?foo()
左值?foo = something;
)?问题4
需要更多解释。有了它,我试图了解一个左撇子究竟是什么。我看到的另一个定义是:“左值具有可以获得的存储地址”。我不确定存储地址究竟是什么,但以我们的函数foo
为例 - 我们绝对可以获得该功能的某些地址。在C++
中,它只是函数的名称
foo; // returns the address of funtion 'foo'
但与此同时,我认为我们不能分配给foo
(问题3
)。那么 - 它是否是左值?
如果你回答了全部4分,我会很感激。我将问题标记为C++
而不是C++11
,因为我认为该问题适用于该语言的所有版本。但是,如果有任何差异,请提及。
答案 0 :(得分:6)
foo
是左值?
是。指定函数的主表达式是左值。但是,在某些上下文中,函数被隐式转换为指针;该指针是 prvalue (或者只是 rvalue ,在C ++ 11之前)。
foo()
是左值?
是。如果结果是 lvalue 引用类型,函数调用的值是左值,就像它在这里一样。
可以将功能(不是函数调用)分配给
没有。只能将可修改的对象分配给。
“左值是可以分配给的每个对象/事物” - 这个陈述是否始终正确和准确?
没有。 左值是指定函数或对象的表达式。只有在指定可修改的对象时才能分配它。