对强制转换运算符使用移动语义

Using move semantics for a cast operator

本文关键字:移动 语义 运算符 转换      更新时间:2023-10-16

假设我有两个类foobar,它们有很好的相关性,我的意思是它们包含公共数据成员。

我在foo类中有一个强制转换运算符operator bar() const;

我还有一个函数func,它取一个bar

如果我使用匿名的临时foo调用func,那么将调用强制转换运算符。但是,由于我不需要foo,我是否可以声明某种move-cast,以便显式地优化任何不必要的副本?

如果编译器支持成员函数上的ref限定符(C++11特性(,则可以:

operator bar() const &
{
  return bar(the_common_data);
}
operator bar() &&
{
  return bar(std::move(the_common_data));
}

[实际示例]

是的,您可以使用r-value this语法:

operator bar() &&{ /* std::move(...); */ }