C++隐式类型转换

【声明:本文例子来自《程序员面试宝典第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)所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换为整型


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值