假设我有一个带有值得移动的非静态数据成员的类,例如一个
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
很奇怪,那为什么人们用它呢?有什么优点?
以下问题的答案不包含我问题的答案:
我觉得
很奇怪,那为什么人们要使用它呢?B
我只能推测,但我假设使用它的人不会觉得它很奇怪。
有什么优势?
无 - 除了比
std::move(m_values)
更喜欢它的人的可读性。