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)所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换为整型
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)所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换为整型
相关文章推荐
- 黑马程序员-OC语言-NSString 类介绍及用法(听课笔记)
- 【C语言】多温度传感器大数据的分析与处理实验报告
- c++ primer读书笔记-第四章 数组和指针
- LeetCode_Convert Sorted Array to Binary Search Tree
- C语言文件路径问题(一)
- C++ 的lambda 与template结合使用
- C语言学习笔记(七)——其他运算符
- [Qt C++]对酷狗krc文件进行解码
- c++程序员经典面试题(2)
- C语言复合字面量的使用
- LeetCode_Construct Binary Tree from Inorder and Postorder Traversal
- 【protobuf】 1.生成C++代码
- C++ enum and namespace
- C++中vector使用
- c/c++中内存区域划分大总结
- C++ MFC 计时器(OnTimer)的用法实例
- LeetCode_Construct Binary Tree from Preorder and Inorder Traversal
- c++opencv项目移植到Android(Mat—》IplImage*)
- C语言的作用域规则
- 集合的模拟实现(函数模板)