何时需要强制类型转换?
来源:互联网 发布:淘宝网绣花鞋布鞋 编辑:程序博客网 时间:2024/06/10 20:04
可能运行程序时,大家或多或少出现过编译器报这样的警告:
#include<iostream>using namespace std;int main(){int i=3;double j=3.99;i*=j;cout<<i<<endl;//11system("pause");return 0;}
warning C4244: “*=”: 从“double”转换到“int”,可能丢失数据,
实际上,上面语句
i*=j;
正确的执行顺序是:先将i隐式转换为double,然后与变量j相乘(3.99*3.0=11.97),相乘的结果又重新赋给int i(11),缺少了小数部分,也就是警告中的数据丢失。
再看下面的例子:
#include<iostream>using namespace std;int main(){int i=3;double j=3.99;i*=static_cast<int>(j);cout<<i<<endl;//9system("pause");return 0;}
这次执行,编译器不会报任何错误,因为用到了强制类型转换,强制类型转换关闭或挂起了正常的类型检查。
为了是程序达到你想要的效果,我们常常使用 static_cast 取代由编译器实现的隐式转换。-----编辑器隐式转换,你必须很清楚的知道转换顺序,不然可能得不到你想要的结果。
对于上面两个程序,在实际任务中,需要怎么去计算,需要自己很好的把握,不能混淆了计算的顺序,导致错误。
不过,还是要建议尽量避免使用强制类型转化,因为强制类型转换关闭或挂起了正常的类型检查。强烈建议程序员避免使用强制类型转换,不依赖强制类型转换也能写出很好的 C++程序。每次使用强制转换前,程序员应该仔细考虑是否还有其他不同的方法可以达到同一目的。如果非强制转换不可,则应限制强制转换值的作用域,并且记录所有假定涉及的类型,这样能减少错误发生的机会。使用了强制类型转换,在出现问题时,可能难以定位问题到底出现在那一块。
0 0
- 何时需要强制类型转换?
- 何时需要强制类型转换(一)
- C++需要注意的强制类型转换运算符
- PHP simplexml解析结果需要进行强制类型转换
- 关于强制类型转换:强制类型转换
- 类型转换&&类型强制转换
- 类型转换&&类型强制转换
- 类型转换(向下强制)
- c++强制类型转换
- 强制类型转换
- 关于强制类型转换
- c++强制转换类型
- C++ 强制类型转换
- c++强制类型转换
- 强制类型转换
- C++强制类型转换
- java强制类型转换
- c++强制类型转换
- [linux] 命令对应英文全称
- RS485芯片介绍及典型应用电路
- Centos/Ubuntu安装dhcp服务器(Not configured to listen on any interfaces!)
- SharePoint 2013 隐藏页面的Ribbon ,菜单等非内容元素。
- PCI 原理
- 何时需要强制类型转换?
- 编程练习:Biorhythms
- WebService中WSDL文件详解
- 堆和栈
- Machine Learning线性回归
- C++编程实现从注册表中获取程序安装路径并调用exe文件
- iOS开发系列--网络开发
- 代码标准--调试
- java多线程学习