C++ primer学习之类型转换(1) 隐式转换
来源:互联网 发布:数据库物理设计图visio 编辑:程序博客网 时间:2024/05/21 09:21
隐式转化
先来看下面这条表达式,它的目的是将ival初始化为6:
int ival=3.541+3; //编译器可能会警告该运算损失了精度
加法的两个运算对象类型不同,3.541的类型是double,3的类型是int。C++语言不会直接将两个不同类型的相加,而是根据类型转换规则设法将运算对象的类型统一后再求值。上述的类型转换时自动执行的,无须程序员介入,有时候甚至不需要程序员了解,因此,我们称之为隐式转换。
因为 C++定义了算术类型之间的内置转换以尽可能防止精度损失,所以这里3转换为double型相加得6.451。但是下一步赋值的时候,右操作数进行截断处理,对此精度会有损失,编译器也会给出警告。在函数调用时也会发生隐式类型转换,具体的转换细节可参见本节。
常见隐式转化
算术转换
1.对于bool, char,signed char, unsigned char,short, unsigned short等类型来说,它们都有可能通过整型提升变为int型。如:
a:false提升成了0,true提升了为1
b:
3.14159L+‘a’;
在这个加法运算中,小写字母‘a’是char型的字符常量,它其实能表示一个数字值,到底这个数字值是多少完全依赖于机器上的字符集。当把‘a’ 和一个long double类型的数相加时,char的值首先被提升成int,然后int 类型的值再转化为long double
c:
假如两个类型分别是 unsigned int 和 int,则int类型的运算对象会转换为unsigned int
数组转换为指针
在大多数用到的数组表达式中,数组自动转换为指向数组首元素的指针:
int ia[10]; /*含有10个整数的数组*/int *ip=ia; /*ia转换成指向数组首元素的指针*/
指针的转换
1.转换为布尔类型
char *cp=get_string();if(cp) /*... */ //如果cp不为0,则条件为真while(*cp) //如果*cp不是空字符,则条件为真
2.转换成常量
int i;const int &j=i; //非常量转换const int的引用const int *p=&i; //非常量的地址转换成常量的地址int &r=i, *q=p;//错误:不允许const转换为非常量
3.类类型的转换:
string s; while(cin>>s)
这里隐式使用了IO标准库定义的类型转换,返回的是cin,此处将istream类型的值转换为bool类型,意味这要检验流的状态,如果读取成功,返回true,如果失败,比如说读取到文件的末尾,那么转换为bool后为false;循环条件不成立
- C++ primer学习之类型转换(1) 隐式转换
- C++primer学习笔记-----4.11类型转换
- C++学习之路C++Primer学习笔记(三)_类型转换
- 《C++primer(第五版)》学习之路-第十四章:重载运算与类型转换
- 强制类型转换 (c++primer)
- C++ Primer 学习笔记:类型转换
- 【C++Primer Ch5表达式】类型转换:显示转换
- C隐式类型转换
- conversion类型转换1(隐式转换)----C++学习之路
- C语言之类型转换
- C语言之类型转换
- C语言之类型转换
- C语言之类型转换
- JavaScript类型转换之隐式类型转换
- js之数据类型-隐式转换-类型检测 学习总结
- Struts2学习之类型转换
- c++学习之类型转换
- struts2学习之---类型转换
- Socket编程
- 使用common-fileUpload制作文件上传(DiskFileItemFactory方式)
- hadoop下linux集群间设置ssh免密登录
- 【LeetCode题解】链表Linked Lis
- [gridview] -- Column源码
- C++ primer学习之类型转换(1) 隐式转换
- pdf阅读器与迅捷pdf编辑器的使用方法
- 浅析软件产品生命周期的重要角色
- 算法训练 摆动序列
- Nginx的使用
- for循环中的++i和i++(摘抄总结)
- webgis里对于有收缩框的布局地图显示的问题
- 搭建测试环境
- Cloudera Manager、CDH零基础入门、线路指导