我在 Pytorch 的张量后端(ATen, source)中遇到了一个不熟悉的移动赋值运算符签名。只是出于好奇,&&
操作员在结束时会做什么
Tensor & Tensor::operator=(Tensor && rhs) &&
虽然我熟悉移动语义以及通常的复制/移动构造函数和赋值运算符签名,但我无法在网上找到有关上述语法的任何文档。
如果有人能解释这个运算符的作用,它与通常的移动赋值操作有何不同,以及何时应该使用它,我将不胜感激。
我在 Pytorch 的张量后端(ATen, source)中遇到了一个不熟悉的移动赋值运算符签名。只是出于好奇,&&
操作员在结束时会做什么
Tensor & Tensor::operator=(Tensor && rhs) &&
虽然我熟悉移动语义以及通常的复制/移动构造函数和赋值运算符签名,但我无法在网上找到有关上述语法的任何文档。
如果有人能解释这个运算符的作用,它与通常的移动赋值操作有何不同,以及何时应该使用它,我将不胜感激。
用作表达式的类的对象可以是右值或左值。移动赋值运算符是类的成员函数。
本声明
Tensor & Tensor::operator=(Tensor && rhs) &&
表示为类的右值对象调用此移动赋值运算符。
这是一个演示程序。
#include <iostream>
struct A
{
A & operator =( A && ) &
{
std::cout << "Calling the move assignment operator for an lvalue object\n";
return *this;
}
A & operator =( A && ) &&
{
std::cout << "Calling the move assignment operator for an rvalue object\n";
return *this;
}
};
int main()
{
A a;
a = A();
A() = A();
return 0;
}
程序输出为
Calling the move assignment operator for an lvalue object
Calling the move assignment operator for an rvalue object
就是在这个声明中
a = A();
赋值的左侧操作数是左值。
在这份声明中
A() = A();
赋值的左侧操作数是右值(一个临时对象)。