gpt4 book ai didi

c++ - "rvalue references for *this"是做什么用的?

转载 作者:行者123 更新时间:2023-12-01 22:41:24 24 4
gpt4 key购买 nike

“*this 的右值引用”最典型的用例是什么?标准也将其称为成员函数的引用限定符?

顺便说一下,关于这个语言特性有一个非常好的解释 here

最佳答案

调用时,每个成员函数都有一个 *this 引用的隐式对象参数。

所以(a)这些正常的函数重载:

void f(const T&);
void f(T&&);

当像f(x)这样调用时; (b) 这些成员函数重载:

struct C
{
void f() const &;
void f() &&;
};

当像 x.f() 那样调用时 - (a) 和 (b) 都以相似的可行性和排名进行调度。

所以用例本质上是相同的。它们是为了支持移动语义优化。在右值成员函数中,您实际上可以掠夺对象资源,因为您知道它是一个即将到期的对象(即将被删除):

int main()
{
C c;
c.f(); // lvalue, so calls lvalue-reference member f
C().f(); // temporary is prvalue, so called rvalue-reference member f
move(c).f(); // move changes c to xvalue, so again calls rvalue-reference member f
}

例如:

struct C
{
C operator+(const C& that) const &
{
C c(*this); // take a copy of this
c += that;
return c;
}

C operator+(const C& that) &&
{
(*this) += that;
return move(*this); // moving this is ok here
}
}

关于c++ - "rvalue references for *this"是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58216771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com