C++ - 当您在右值引用前面放置一个与号 (&) 时,这意味着什么?
C++ - What does it mean when you put an ampersand (&) in front of an rvalue reference?
所以我有这个代码:
foo<T>& foo<T>::operator=(foo&& M)
{
if (this != &M)
{
// Do something
}
}
我很困惑 this != &M
在这里的意思。当您尝试获取右值引用的内存地址时会发生什么?这就是这段代码试图做的吗?
this != &F
具体是做什么的?它检查什么?
- 使用右值引用作为赋值运算符的参数的目的是什么?
对不起,如果这是愚蠢的。我是 C++ 的新手,我正在尝试了解右值引用的工作原理以及为什么在这种情况下使用它们。
谢谢!
它只是检查自赋值。如果传入对象的地址与 this
相同,则什么也不做。
乍一看,您似乎对参考文献的看法不正确。引用类似于指针,用于防止在函数调用中复制整个对象。这就是为什么我们对可能是大块 oc 内存(如 mtrices)的对象使用 rdferences 的原因。
但与指针有一些区别。
创建引用后,它看起来像一个普通变量(不需要 *, & 来访问它的值和地址)
this != &M
表示M的地址是否等于这个?
检查这个对象和另一个对象是否是同一个对象。如果是,则只是 return 当前对象。如果没有,清除底层数据...并将M的数据复制到当前对象,但似乎这个实现并不完整。我没有看到复制表达式...
所以我有这个代码:
foo<T>& foo<T>::operator=(foo&& M)
{
if (this != &M)
{
// Do something
}
}
我很困惑 this != &M
在这里的意思。当您尝试获取右值引用的内存地址时会发生什么?这就是这段代码试图做的吗?
this != &F
具体是做什么的?它检查什么?- 使用右值引用作为赋值运算符的参数的目的是什么?
对不起,如果这是愚蠢的。我是 C++ 的新手,我正在尝试了解右值引用的工作原理以及为什么在这种情况下使用它们。
谢谢!
它只是检查自赋值。如果传入对象的地址与 this
相同,则什么也不做。
乍一看,您似乎对参考文献的看法不正确。引用类似于指针,用于防止在函数调用中复制整个对象。这就是为什么我们对可能是大块 oc 内存(如 mtrices)的对象使用 rdferences 的原因。 但与指针有一些区别。 创建引用后,它看起来像一个普通变量(不需要 *, & 来访问它的值和地址)
this != &M
表示M的地址是否等于这个?
检查这个对象和另一个对象是否是同一个对象。如果是,则只是 return 当前对象。如果没有,清除底层数据...并将M的数据复制到当前对象,但似乎这个实现并不完整。我没有看到复制表达式...