今天给各位分享C++11新特性(66)使用static_cast将左值转换为右值的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
C++11新特性(24)——右值引用(续)
使用std::move
检查以下两个函数:
它们是相同的,只是一个参数类型是左值引用,另一个是右值引用。结合前面的文章,我们可以得出以下结论:左值引用表示该值可以被修改,右值引用是外部请求接管参数数据的权利。相应地,右值引用的情况需要调用者明确放弃权利。
这里放弃权限的方式是通过std:move函数,就像上图中fr函数中所做的那样。
理解std::move
以下是std:move的源代码:
我们先看一下函数体。它只做了一件事:使用static_cast 将实际参数t 显式转换为另一种类型。这种类型是:
typename 用于指示后面的表达式是类型而不是变量。先忽略它;然后去掉负数(暂时不考虑),代码就变成如下:
我们知道(如果不知道,我们会告诉你),remove_reference的作用就是移除引用类型修饰符。
例如:如果T的类型为int或int,则返回int;如果T的类型是int,也返回int;
考虑到刚才忽略的修饰符,我们可以得出以下结论:static_cast的目标类型是输入类型T,删除可能的引用修改,然后添加右值引用修改。
也就是说std:move的作用就是利用static_cast显式地将T,T,T全部转换为T。
右值引用的作用是要求数据提供者放弃数据的所有权,而std:move就是放弃数据所有权的手段。双方都可以在编译层面解决。
关注【面向对象思维】,轻松学习每一天!
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/124434.html
用户评论
麝香味
这篇文章解释的很清晰啊,我以前一直不明白static_cast到底能干什么用的,现在终于弄明白了。关键是它可以让我在一些情况下轻松地把一个左值转换成右值,真是太实用了!
有19位网友表示赞同!
娇眉恨
我觉得这篇文章的重点放在了C++11中 introduced 的 static_cast 用法上, 解释得很细致了,对于刚入门C++ 的同学来说非常友好。但对于老手来说,可能觉得没啥新鲜感。 <br>
有11位网友表示赞同!
惯例
讲道理,转换左右值这事儿在 C 的语法里就存在了。static_cast 在这里其实是一种更明确的表达方式,可以避免某些情况下隐式转换带来的不确定因素。不过,用得太多容易显得代码冗余…
有16位网友表示赞同!
爱到伤肺i
C++11更新很多新特性真是让程序员眼前一亮啊! 这次讲的static_cast 这个功能很实用,有时候遇到函数传递需要右值的时候就能轻松解决了!
有12位网友表示赞同!
余笙南吟
静态类型转换在C++里是基本功吧,之前都是看别人的代码,没认真理解过其原理。这篇文章讲解得很好,终于搞明白了它的作用和应用场景!给个赞!
有5位网友表示赞同!
日久见人心
用static_cast将左值转换为右值确实很有用,例如在需要传对象作为参数的函数里,如果该函数要求右值的情况,这样就可以很方便地实现。
有19位网友表示赞同!
▼遗忘那段似水年华
对C++的新特性始终保持学习的心态很重要。不过我觉得这篇文章没有特别深入讲解static_cast的使用场景,希望能有更多实例说明。
有14位网友表示赞同!
琴断朱弦
C++11的更新确实很酷炫! 这篇文章虽然简短, 但是点明了static_cast 的关键用途,对于想了解这个新特性的朋友有一定参考价值.
有5位网友表示赞同!
陌上蔷薇
感觉这种转换方式有点绕, 我习惯用其他的方法来解决这个问题。不过还是学习一下,毕竟每个工具都有其使用场景吧!
有5位网友表示赞同!
喜欢梅西
作者把 C++11 的 static_cast 用法解释得很清楚,特别是对于初学者来说非常友好。但我觉得可以再多加一些实例代码说明,更容易理解和应用。
有11位网友表示赞同!
颓废i
以前遇到这种转换问题总不知道如何处理,现在看了这篇文章终于了解了,真是太感激了!
有19位网友表示赞同!
为爱放弃
用 static_cast 将左值转换为右值的场景比较特殊,不是常用操作。文章把这个特性解释清楚,可以帮助我们更好地认识 C++11 语言特性。
有20位网友表示赞同!
(り。薆情海
其实对于老程序员来说,这种类型的转换方式没什么新鲜感,C语言中就已经存在很久了。作者或许可以结合更多实际案例进行讲解,对读者更有吸引力吧!
有20位网友表示赞同!
优雅的叶子
文章讲解静态类型转换的运用挺好, 尤其是针对左值和右值的区别进行了很好的解释!给个赞!
有16位网友表示赞同!
情字何解ヘ
觉得用static_cast这个语法写代码还是比较简洁直观的,而且能避免一些潜在的语义错误。 这篇文章的写作风格也很适合阅读学习!
有13位网友表示赞同!
厌归人
这篇博文内容虽好,但我觉得文章例子比较少,可以增多一些实例来帮助读者更深入地理解 static_cast 应用场景吧!
有13位网友表示赞同!
南宫沐风
静态类型转换的使用非常灵活,尤其是在处理引用和指针的时候。这篇文章虽然简洁,但却点明了其核心用途,让人受益匪浅!
有14位网友表示赞同!
醉红颜
我个人觉得 static_cast 在很多情况下都是可以替代的,其他方法同样能解决问题。 文章可以多针对不同情况提供比较分析,方便读者选择合适的方案。
有8位网友表示赞同!