C/C++类型转换总结
最近做笔试题经常会碰到有关类型转换的题型,所以结合例子做下总结,也是希望自己能更时刻的理解类型转换。
C++的类型转换包括内置类型和类类型对象的转换。
(1) 1.1隐式类型转换(implicit type conversion) :转换规则由编译器自动执行,无需程序员的介入,有时甚至不需要程序员了解。
例子:
int ival = 0;
ival = 3.14 + 3; //会有编译警告出现
其中3.14是double型字面值常量,而3是int型字面值常量,C++在执行算术运算前,会将两操作数转换为同一数据类型,而不是不同类型直接操作。C++定义的算术类型的内置转换原则是尽可能的防止精度损失。转换原则采取两数据元素精度值最高的为标准进行转换,在本例中算术计算得到的和为double型,赋值时再将double转换成int。
笔试题(某科技公司笔试题)
unsigned int a=2003;
int count=0;
int b=-2;
while((b+a)>0)
{
a=a+b;
count++;
}
count = ? (while条件判断中,因为ab的类型不一致,在进行运算操作时会统一内置转换为无符号,条件的值永远大于零,而造成死循环)
1.2 何时发生隐式类型转换
1.2.1在混合类型的表达式中,其操作数被转换为相同的类型:
int ival;
double dval;
ival >= dval // ival被转换成double
1.2.2用作条件的表达式被转换成bool类型:
int ival;
if (ival) //ival转换成bool
while (cin) //cin转换成bool
1.2.3用一表达式初始化某个变量,或将一表达式赋值给某个变量,则该表达式被转换为该变量类型。
int ival = 3.14;//3.14转换成int
int *ip;
ip = 0; //int 0被转换为int *的空指针
1.3 隐式转换的类型
1.3.1指针转换
在使用数组时,大多数情况下数组都会自动转换为指向第一个元素的指针。
int ia[10];
int *ip = ia; //ia被转换成指针
1.3.2 转换为bool类型
1.3.3算术类型与bool类型的转换
1.3.4转换与枚举类型
1.3.5转换为const对象
1.3.6由标准库类型定义的转换
string s;
while (cin>>s) //即读入cin,将istream类型转换为bool类型,检测流状态,读入成功则流的状态将导致上述类型转换为bool后获得true,否则为false.