【问题标题】:When does it matter that `this` is an rvalue?什么时候'this'是一个右值?
【发布时间】:2016-02-09 22:44:13
【问题描述】:

我知道type of this 是一个prvalue(“纯”右值)指针,并且可以将其设为指向 const 和/或指向 volatile 的指针(影响对其实例变量的访问) ),通过将关键字 constvolatile 附加到它所属的函数定义的末尾。

我也知道 this 有时(不正确地)被描述为一个 const 指针,也许是在说“你不能给 this 赋值”。作为右值,它本质上是不可赋值的,因此不需要const 右值的概念。

我也知道在 C++11 中,存在右值或左值会影响调用解析的情况,但我已尝试解决这些可能性,但我不确定是否存在这样的情况实际上,将this 称为右值指针而不是const 左值指针的解析很重要。

从程序员的角度来看,是否存在这种区别真正不同的情况,例如可以使用右值指针但不能使用const 左值指针的上下文,而const 左值指针可以用于右值指针不能使用,或者差异影响调用分辨率的地方?

【问题讨论】:

    标签: c++ c++11 this language-lawyer


    【解决方案1】:

    this 成为prvalue 的一个明显后果是&this 是非法的。因此,内置一元运算符& 举例说明了“可以使用 const 左值指针而右值指针不能使用的地方”。出于同样的根本原因,无法将引用直接绑定到 this

    另外,this 的纯右值意味着this 本身不能是constvolatile,因为标量右值不能具有 cv 限定类型。

    可能很难根据这些区别构建非深奥的真实代码示例。

    【讨论】:

    • 另一个后果是在 lambda 中捕获 this 是一种特殊的语言情况(因为您通常只能捕获左值)
    • 我这样说对吗,因为&this 是非法的,我们也不能将this 传递给一个接受右值引用的函数?这是否足以证明通过this 的呼叫的呼叫解析不受其右值状态的影响?或者像blocking the passing of rvalues as arguments 这样的东西可能仍然适用于this
    猜你喜欢
    • 2012-01-26
    • 2018-02-16
    • 1970-01-01
    相关资源
    最近更新 更多