您的位置:首页 > 编程语言 > C语言/C++

C++隐式类型转换

2015-06-29 19:07 411 查看
【声明:本文例子来自《程序员面试宝典第4版》】

1、
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <typeinfo>
using namespace std;
int main()
{
int val=3;
double dval=3.14156;
double su=val+dval;
cout<<typeid(val).name()<<typeid(dval).name()<<endl;
system("pause");
}
val计算时被仍然是int型



【获得变量类型】





2、用一种类型的表达式赋值给另一类型对象
int val=3;
double dval=3.14156;
double su=val+dval;
int *pi=0;
[0原本是常数,现被转换成int*型的指针表示空地址]
val=dval;
cout<<typeid(pi).name()<<typeid(*pi).name()<<typeid(dval).name()<<pi<<endl;





3、一个表达式传递给一个函数,调用表达式的类型与形参类型不同,这情况下,目标转换类型是形式参数的类型。
[形参是double型,调用参数类型为int]
int main()
{
int x=2;
void tet(double x);
tet(x);
system("pause");
}
extern void tet(double x)
{
cout<<typeid(x).name()<<" "<<x<<endl;
}





[升级版]
int main()
{
double x=2.25555;
void tet(int x);
tet(x);
cout<<typeid(x).name()<<" "<<x<<endl;
system("pause");
}
extern void tet(int x)
{
cout<<typeid(x).name()<<" "<<x<<endl;
}





4、一个函数返回一个表达式的类型与返回类型不相同
double difference(int ival1,int ival2)
{
return ival1-ival2;
[返回值被提升为double类型]
}

两个通用指导原则:
(1)为防止精度损失,如果必要,类型总被提升为较宽类型
(2)所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换为整型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: