C++11新特性(66)使用static_cast将左值转换为右值

温故而知新C++显式转换(1)-static_castC++11新特性(23)- 右值引用C++11新特性(24)-右值引用(续)使用std::move考察下面

今天给各位分享C++11新特性(66)使用static_cast将左值转换为右值的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

C++11新特性(24)——右值引用(续)

使用std::move

检查以下两个函数:

它们是相同的,只是一个参数类型是左值引用,另一个是右值引用。结合前面的文章,我们可以得出以下结论:左值引用表示该值可以被修改,右值引用是外部请求接管参数数据的权利。相应地,右值引用的情况需要调用者明确放弃权利。

C++11新特性(66)使用static_cast将左值转换为右值

这里放弃权限的方式是通过std:move函数,就像上图中fr函数中所做的那样。

理解std::move

以下是std:move的源代码:

我们先看一下函数体。它只做了一件事:使用static_cast 将实际参数t 显式转换为另一种类型。这种类型是:

C++11新特性(66)使用static_cast将左值转换为右值

typename 用于指示后面的表达式是类型而不是变量。先忽略它;然后去掉负数(暂时不考虑),代码就变成如下:

我们知道(如果不知道,我们会告诉你),remove_reference的作用就是移除引用类型修饰符。

例如:如果T的类型为int或int,则返回int;如果T的类型是int,也返回int;

考虑到刚才忽略的修饰符,我们可以得出以下结论:static_cast的目标类型是输入类型T,删除可能的引用修改,然后添加右值引用修改。

C++11新特性(66)使用static_cast将左值转换为右值

也就是说std:move的作用就是利用static_cast显式地将T,T,T全部转换为T。

右值引用的作用是要求数据提供者放弃数据的所有权,而std:move就是放弃数据所有权的手段。双方都可以在编译层面解决。

关注【面向对象思维】,轻松学习每一天!

用户评论

C++11新特性(66)使用static_cast将左值转换为右值
麝香味

这篇文章解释的很清晰啊,我以前一直不明白static_cast到底能干什么用的,现在终于弄明白了。关键是它可以让我在一些情况下轻松地把一个左值转换成右值,真是太实用了!

    有19位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
娇眉恨

我觉得这篇文章的重点放在了C++11中 introduced 的 static_cast 用法上, 解释得很细致了,对于刚入门C++ 的同学来说非常友好。但对于老手来说,可能觉得没啥新鲜感。 <br>

    有11位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
惯例

讲道理,转换左右值这事儿在 C 的语法里就存在了。static_cast 在这里其实是一种更明确的表达方式,可以避免某些情况下隐式转换带来的不确定因素。不过,用得太多容易显得代码冗余…

    有16位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
爱到伤肺i

C++11更新很多新特性真是让程序员眼前一亮啊! 这次讲的static_cast 这个功能很实用,有时候遇到函数传递需要右值的时候就能轻松解决了!

    有12位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
余笙南吟

静态类型转换在C++里是基本功吧,之前都是看别人的代码,没认真理解过其原理。这篇文章讲解得很好,终于搞明白了它的作用和应用场景!给个赞!

    有5位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
日久见人心

用static_cast将左值转换为右值确实很有用,例如在需要传对象作为参数的函数里,如果该函数要求右值的情况,这样就可以很方便地实现。

    有19位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
▼遗忘那段似水年华

对C++的新特性始终保持学习的心态很重要。不过我觉得这篇文章没有特别深入讲解static_cast的使用场景,希望能有更多实例说明。

    有14位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
琴断朱弦

C++11的更新确实很酷炫! 这篇文章虽然简短, 但是点明了static_cast 的关键用途,对于想了解这个新特性的朋友有一定参考价值.

    有5位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
陌上蔷薇

感觉这种转换方式有点绕, 我习惯用其他的方法来解决这个问题。不过还是学习一下,毕竟每个工具都有其使用场景吧!

    有5位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
喜欢梅西

作者把 C++11 的 static_cast 用法解释得很清楚,特别是对于初学者来说非常友好。但我觉得可以再多加一些实例代码说明,更容易理解和应用。

    有11位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
颓废i

以前遇到这种转换问题总不知道如何处理,现在看了这篇文章终于了解了,真是太感激了!

    有19位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
为爱放弃

用 static_cast 将左值转换为右值的场景比较特殊,不是常用操作。文章把这个特性解释清楚,可以帮助我们更好地认识 C++11 语言特性。

    有20位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
(り。薆情海

其实对于老程序员来说,这种类型的转换方式没什么新鲜感,C语言中就已经存在很久了。作者或许可以结合更多实际案例进行讲解,对读者更有吸引力吧!

    有20位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
优雅的叶子

文章讲解静态类型转换的运用挺好, 尤其是针对左值和右值的区别进行了很好的解释!给个赞!

    有16位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
情字何解ヘ

觉得用static_cast这个语法写代码还是比较简洁直观的,而且能避免一些潜在的语义错误。 这篇文章的写作风格也很适合阅读学习!

    有13位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
厌归人

这篇博文内容虽好,但我觉得文章例子比较少,可以增多一些实例来帮助读者更深入地理解 static_cast 应用场景吧!

    有13位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
南宫沐风

静态类型转换的使用非常灵活,尤其是在处理引用和指针的时候。这篇文章虽然简洁,但却点明了其核心用途,让人受益匪浅!

    有14位网友表示赞同!

C++11新特性(66)使用static_cast将左值转换为右值
醉红颜

我个人觉得 static_cast 在很多情况下都是可以替代的,其他方法同样能解决问题。 文章可以多针对不同情况提供比较分析,方便读者选择合适的方案。

    有8位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/124434.html

(0)
小su的头像小su
上一篇 2024年9月1日 下午6:51
下一篇 2024年9月1日 下午6:53

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注