gpt4 book ai didi

c++ - 奇怪的移动赋值运算符签名

转载 作者:行者123 更新时间:2023-12-01 14:39:48 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





const& , & and && specifiers for member functions in C++

(2 个回答)



What's a use case for overloading member functions on reference qualifiers?

(4 个回答)


2年前关闭。




我在 Pytorch 的张量后端(ATen,source)中遇到了一个不熟悉的移动赋值运算符签名。
只是出于好奇,&& 是什么意思?运算符(operator)在末尾做

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();

赋值的左侧操作数是右值(一个临时对象)。

关于c++ - 奇怪的移动赋值运算符签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60554813/

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