【聲明:本文例子來自《程序員面試寶典第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)所有含有小於整型的有序類型的算術表達式在計算之前其類型都會被轉換爲整型