gpt4 book ai didi

c++ - 如果当前对象是 r 值引用,是否可以返回当前对象?

转载 作者:行者123 更新时间:2023-12-01 11:57:52 25 4
gpt4 key购买 nike

我最近了解了 r 值引用。为了更彻底的实验,我决定编写一个简单的 DenseMatrix 类。我的问题是是否可以编写任何函数(本例中为 Transpose),例如 auto A = B.Transpose()返回单独的矩阵,但对于 auto A = (B + C).Transpose() Transpose的结果是计算到位的?

最佳答案

是的,您可以重载 Transpose调用它的对象的 ref-qualification 上的成员函数:

class DenseMatrix {

DenseMatrix Transpose() const & { // #1 called on l-values
auto copy = *this;
// transpose copy
return copy;
}

DenseMatrix&& Transpose() && { // #2 called on r-values
// transpose *this
return std::move(*this);
}
};
所以你得到了结果:
B.Transpose();        // calls #1
(B + C).Transpose(); // calls #2
这是一个 demo .
请注意,您可以根据 r 值重载来实现左值重载,如下所示:
DenseMatrix Transpose() const & {  
auto copy = *this;
return std::move(copy).Transpose();
}
这是一个 demo .

关于c++ - 如果当前对象是 r 值引用,是否可以返回当前对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62958456/

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