如何(正确)移动非静态数据成员?

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

假设我有一个带有值得移动的非静态数据成员的类,例如一个

std::vector
。当我使用 ref 限定符编写 get 访问器时,我可以区分类对象的左值和右值。在左值情况下,我将复制该成员,但在右值情况下,我将移动它。为此,我在以下代码片段中看到了标记为
A
B
的两种语法:

class C
{
    std::vector<int> m_values;
public:
    std::vector<int> values() const &;
    std::vector<int> values() &&
    {
        return std::move(m_values); // A
        return std::move(*this).m_values; // B
    }
};

我测试了两者,它们都改变了值。我明白为什么人们会使用

A
,其意图显而易见。我觉得
B
很奇怪,那为什么人们用它呢?有什么优点?

以下问题的答案不包含我问题的答案:

c++ c++11 move
1个回答
1
投票

我觉得

B
很奇怪,那为什么人们要使用它呢?

我只能推测,但我假设使用它的人不会觉得它很奇怪。

有什么优势?

无 - 除了比

std::move(m_values)
更喜欢它的人的可读性。

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