C ++-在右值引用前放置与号(&)是什么意思?

问题描述 投票:0回答:1

因此,我找到了Matrix类的赋值运算符函数的以下代码示例:

Matrix<T>& Matrix<T>::operator=(Matrix&& M) 
{
  if (this != &M)
  {
    delete[] m_vec;
    M.m_rows = 0;
    M.m_cols = 0;
    M.m_capacity = 0;
    M.m_vec = nullptr;
  }
  return *this;
}

而且我对this != &M在这里的含义感到很困惑。当您尝试获取右值引用的内存地址时会发生什么?这就是这段代码要做什么吗?

  1. this != &M到底做什么?它检查什么?
  2. 将右值引用用作赋值运算符的参数的目的是什么?
  3. 实际的“分配”部分在哪里发生?据我所知,它们只是删除右值引用的值和属性,然后返回this的值...没有给出新值?

抱歉,这很愚蠢。我是C ++的新手,我想学习右值引用的工作方式以及为什么在这种情况下使用它们。

谢谢!

c++ operator-overloading rvalue-reference rvalue
1个回答
0
投票

这只是检查自我分配。如果要传递的对象的地址与this相同,则不执行任何操作。

© www.soinside.com 2019 - 2024. All rights reserved.