当前位置: 首页> 房产> 家装 > 龙泉网站建设_江门网站建设推广平台_重庆森林电影简介_济南优化网站的哪家好

龙泉网站建设_江门网站建设推广平台_重庆森林电影简介_济南优化网站的哪家好

时间:2025/7/11 8:31:21来源:https://blog.csdn.net/cclethe/article/details/145800991 浏览次数:0次
龙泉网站建设_江门网站建设推广平台_重庆森林电影简介_济南优化网站的哪家好

文章目录

    • move
    • forward
    • 总结
    • 参考

基于C++11标准

在c++标准库的utility中,提供了下面几个非常用用的小函数:

  • x2=forward(x):x2是一个右值;不抛出异常
  • x2=move(x):x2是一个右值;不抛出异常
  • x2=move_if_noexcept(x):若x可移动,x2=move(x);否则x2=x;不抛出异常

move

move进行简单的右值转换:

template< class T >
typename std::remove_reference<T>::type&& move( T&& t ) noexcept;

我们用move告知编译器:此对象在上下文中不再被使用,因此其值可被移动,留下一个空对象
最简单的例子是一个swap的可能实现:

template<class T>
void swap(T& a, T& b) noexcept(is_nothrow_move_constructible<T>() && is_nothrow_move_assignable<t>())
{T tmp{move(a)};a = move(b);b = move(tmp);
}

forward

forward从右值生成一个右值:

template< class T >
T&& forward( typename std::remove_reference<T>::type& t ) noexcept;
template< class T >
T&& forward( typename std::remove_reference<T>::type&& t ) noexcept;

这一对forward函数总是会一起提供,两者之间的选择是通过重载解析实现的。任何左值都会调用第一个版本处理,任何右值都会转向第二个版本处理。

forward的典型用法是将一个实参从一个函数完美转发到另一个函数。标准库make_shared<T>(x)是一个很好的例子。

总结

当希望用一个移动操作”窃取“一个对象的表示形式时,使用move;
当希望转发一个对象时,用forward。
因此,forward(x)总是安全的,而move(x)标记x将被销毁,因此要小心使用。
调用move(x)之后x唯一安全的用法就是析构或是赋值的目的。显然,一个特定类型可能提供更多的保证,理想情况下类的不变式保持不变。但是,除非你确切知道这类保证,否则不要依赖他们。

参考

Standard library header utility
使用std::move优化函数返回值

关键字:龙泉网站建设_江门网站建设推广平台_重庆森林电影简介_济南优化网站的哪家好

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: