对强制转换运算符使用移动语义
Using move semantics for a cast operator
假设我有两个类foo
和bar
,它们有很好的相关性,我的意思是它们包含公共数据成员。
我在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(...); */ }
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 可以使用移动语义更改或改进此C++代码吗?
- c++在使用指针时移动语义
- 移动语义和深层/浅层复制之间有什么关系?
- std::unique_lock移动语义
- 移动语义和运算符 + 重载
- C++ 移动语义是否在任何情况下都能节省资源?
- 移动语义在这里如何工作?
- 使用移动语义:右值引用作为方法参数
- 在C++中使用移动语义的正确方法是什么?
- 移动语义 c++ 单链表
- C++:使用整数移动语义
- 当变量和参数名称匹配时,移动语义构造失败
- 在 C++11 中移动语义
- 方法冗余移动调用的移动语义
- 复制省略并在返回值中移动语义
- std::元组和移动语义
- 移动语义与返回shared_ptr?
- C++具有移动语义的可变参数工厂会导致运行时崩溃