什么时候“这个”是一个右值重要
When does it matter that `this` is an rvalue?
我知道this
的类型是一个 prvalue("纯"右值(指针,并且可以通过将关键字const
或volatile
附加到它所属的函数定义的末尾,使其成为指向常量和/或指向易失性的指针(影响对其实例变量的访问(。
我也知道this
有时(错误地(被描述为常量指针,也许是说"你不能为this
赋值"的一种方式。作为右值,它本质上是不可分配的,因此不需要const
右值的概念。
我也知道,在 C++11 中,在某些情况下,右值或左值会影响呼叫解析,但我试图通过各种可能性,我不确定是否存在调用解析实际上很重要的情况this
是右值指针而不是const
左值指针。
从程序员的角度来看,是否存在这种区别会产生真正差异的情况,例如可以使用右值指针而不能使用const
左值指针的上下文,可以使用const
左值指针而右值指针不能使用,或者差异影响调用解析?
this
成为 prvalue 的一个明显后果是&this
是非法的。因此,内置的一元运算符 &
举例说明"可以使用 const 左值指针,而右值指针不能"。出于同样的根本原因,对this
的引用直接绑定是不可能的。
此外,this
的prvalue-ness意味着this
本身不能const
或volatile
,因为标量右值不能有CV限定的类型。
基于这些区别构建非深奥的现实生活中的代码示例可能很困难。
相关文章:
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 为什么这个案例陈述需要一个"if else"而不仅仅是一个"if"?
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 为什么这个快速排序实现给出了一个奇怪的输出
- c++ 提升如果 .extension() == " "这意味着这个文件是一个文件夹?
- 我正在尝试创建一个 C++ 贪吃蛇游戏,但我似乎无法绘制第二个高度边框,我该如何解决这个问题?
- 为什么这个递归函数会创建一个无限循环?
- 为什么 for 循环只接受这个简单代码中的最后一个字符串?
- 编译器说这个函数必须返回一个值,但我已经有一个 return 语句
- 为什么这个do-while循环每隔一个循环只写入数组?
- 我正在编写一个代码来将 int 数组存储在文件中,然后用 c++ 检索它,但是检索第一项是假值,我该如何解决这个问题?
- 这个基于范围的'for'语句需要一个合适的函数,但找不到任何函数
- 为什么在一个地方需要双倍英镑,而在这个宏观上不需要其他地方?
- 创建 std::set 只复制一个元素,如何解决这个问题?
- 如何让这个C++代码从用户那里读取五个整数而不是一个整数?
- 我如何通过一个 TForm(这个)一般?
- 在VC++中从DLLMAIN内部调用D3D的CREATEDEVICE时,它会创建一个死锁(loaderlock?)。有没有办法克服这个问题?最终目标内
- 为什么在这个分解的 std::string dtor 中有一个锁定的 xadd 指令?
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 我应该如何在这个房间中创建一个新对象 - opengl