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