这篇文章主要介绍“C++为什么尽量不使用类型转换”,在日常操作中,相信很多人在C++为什么尽量不使用类型转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++为什么尽量不使用类型转换”的疑惑有所帮助!接下来,请跟着小编一起来学习吧 香港云主机!按照C++核心准则的说法,应该尽量减少类型转换的使用,如果必须使用则使用narrow_cast和narrow。以下分几种情况讨论这个问题。本来就不应该使用的情况:观察如下代码:SubClass是BaseClass的派生类,可以说SubClass就是BaseClass,因此SubClass类型的指针向Base类型指针赋值的时候就不需要转换。使用模板可以解决的情况:观察下面的代码:
代码中定义了一个整形数字的乘法函数,如果实参是整数的话函数可以正常执行;如果实参是浮点数,一方面编译会产生警告,另一方面计算会丢失精度(和警告的结果一致)。对实参进行类型转换虽然可以解决警告信息但是但是却无法解决丢失精度的问题。这时较好的的解决方式是使用模板:代码中使用了C++11新特性模板函数返回类型后置技术实现了更大的灵活性(两个实参可以是不同类型)。
无论哪种情况都不会出现编译警告,都可以得到正确的结果。
使用narrow_cast和narrow如果设计者处于某种目的就是希望进行窄化类型转换时可以使用gsl提供的narrow_cast进行明确地表达这层意思。如果希望进行类型转换,但是不希望发生窄化的情况下,可以使用narrow类型转换:第一种情况没有发生窄化,因此可以正常执行;第二种情况发生的浮点数到整数的窄化,会触发异常。
到此,关于“C++为什么尽量不使用类型转换”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注开发云网站,小编会继续努力为大家带来更多实用的文章!
这篇文章给大家介绍golang中怎么合并K个排序链表,内容非常详细,感 香港云主机兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。