Is int & foo();一个左值?
Is int & foo(); an lvalue?
我知道可能还有其他类似的问题,但他们没有完全回答我的问题。
我一直在浏览一些关于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
,因为我相信该问题适用于所有版本的语言。但是,如果有任何差异,请提及它们。
foo
是左值吗?
是的。指定函数的主要表达式是左值。但是,在某些上下文中,函数会隐式转换为指针;该指针是一个 prvalue(或只是一个 rvalue,在 C++11 之前)。
foo()
是左值吗?
是的。如果结果是左值引用类型,则函数调用的值为左值,如此处所示。
功能(不是函数调用)是否可以分配给
不。只能将可修改的对象指定给。
"左值是可以分配给的每个对象/事物" - 这个陈述总是正确和准确的吗?
不。左值是指定函数或对象的表达式。仅当它指定了可修改的对象时,才能将其分配给。
相关文章:
- 包装一个对象并假装它是一个 int
- 无法一次从二进制文件中读取一个 int
- 当我输入一个字母时,cin 输入(输入是一个 int),而不是打印错误一次,它打印正确一次,然后在循环的其余部分打印 i
- 为什么我不能使用与"常量字符*"相同的"const int*"创建一个 int 数组?
- 如何将私有整数从A类传递到C 类B类的另一个INT变量
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- 结构C++可以用 0 初始化,但不能用另一个 int 初始化
- 将一个int []转换为字符串,而无需明确的c 循环
- 如何通过另一个int变量递增int变量
- C++根据输入返回一个字符串或一个int
- 如何在另一个结构 arrya 中的一个结构中初始化一个 int 数组
- 两个 UShorts 之间的操作在 VC2015 中给出了一个 int
- turbo 如何在 C++ 的系统() 函数中放入一个 int varriable
- 无限输入C 计算器要结束计算,需要再进行一个INT
- 带有两个INT列表的结构将减少为一个INT
- 在c#中构建一个int数组,每个int调用c++或在c++中构建并传递给c#
- 对于具有 3 个无符号字符和一个 int 的结构来说,对于unordered_map来说,什么是好的哈希函数?
- 当我创建一个int指针并实例化一个数组时,数组在内存中发生了什么
- 如何在C 中的结构内设置一个int数组
- 为什么在我的测试程序中,从字符缓冲区读取一个int时,"std::copy"5x(!)比"