C++ 隐式类型转换

C++定义了一组内置类型对象之间的转换标准,在必要的时候它们被编译器隐式的转换

1、任何两种或多种类型的数据和变量混合操作的时候,最宽的数据类型成为目标转换类型(常量和变量都会被改变)

2、不同类型的表达式之间赋值的时候,被赋值的对象类型成为目标转换类型

3、函数调用实参和形参类型不一致的时候,形参的对象类型成为目标转换类型

4、函数的返回值类型和函数表达式的类型不一样的时候,函数表达式的类型成为目标转换类型

注意:算术运算中两个通用的的指导准则如下

(1)为了防止精度损失,类型总是被提升为较宽的类型。

(2)所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型(即整数提升),计算完之后再转换为被定义的类型。

按照从高到低的顺序给各种数据类型分等级,依次为:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。这里有一个小小的例外,如果 long 和 int 大小相同,则 unsigned int 的等级应位于 long 之上。char 和 short 并没有出现于这个等级列表,是因为它们应该已经被升级成了 int 或者 unsigned int。

 例如:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int a[]={1,2,2,3,4};
 6     int n=sizeof(a);
 7     if(-1>(n/sizeof(int)))
 8         cout<<"1";
 9     else
10         cout<<"2";
11     return 0;
12 }

上述代码的输出结果竟然是1,原因在于sizeof()的返回类型是unsigned int,而-1是int,所以-1被隐式的转换成了unsigned int类型,而变成了

oxffffffff,当然就比5大了。

第一段代码相当于这样

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int a[]={1,2,2,3,4};
 6     int n=sizeof(a);
 7     unsinged int b=n/sizeof(int);
 8     if(-1>b)
 9     //if(-1>(n/sizeof(int)))
10         cout<<"1";
11     else
12         cout<<"2";
13     return 0;
14 }

如果把这段代码中第7行改为 int b=n/sizeof(int)的话,就会输出2了

这也告诉我们在写程序的时候要尽量避免多种类型的混合操作。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 经典算法学习之贪心算法

    贪心算法也是用来求解最优化问题的,相比较动态规划很多问题使用贪心算法更为简单和高效,但是并不是所有的最优化问题都可以使用贪心算法来解决。 贪心算法就是在每个决策...

    用户1215536
  • 堆排序

    堆排序是对简单选择排序算法的一种改进,在每次选择最小记录的同时,根据比较结果对其他记录做出相应的调整。 堆是具有下列性质的完全二叉树:每个节点的值都大于(小于)...

    用户1215536
  • 经典算法学习之回溯法

    回溯法的应用范围:只要能把待求解的问题分成不太多的步骤,每个步骤又只有不太多的选择就可以考虑使用回溯法。  若用回溯法求问题的所有解时,要回溯到根,且根结点的所...

    用户1215536
  • 洛谷P3924 康娜的线段树(期望 前缀和)

    如果你和我一样为了AC不追求效率的话直接#define int __int128就行了。。

    attack
  • OpenCV中积分图介绍与应用

    OpenCV中积分图函数与应用 一:图像积分图概念 积分图像是Crow在1984年首次提出,是为了在多尺度透视投影中提高渲染速度。随后这种技术被应用到基于NC...

    OpenCV学堂
  • Educational Codeforces Round 100 (Rated for Div. 2)

    时刻,机器人处于静止,那么他会执行这条命令,否则会继续执行前一条命令。对于每一条命令

    ACM算法日常
  • 2017.5.26暴力赛解题报告

    预计分数:T1:40AC+60TLE      T2:40AC+60TLE        T3:10AC+90TLE      总分=90 实际分数:T1:10...

    attack
  • BZOJ1485: [HNOI2009]有趣的数列(Catalan数,质因数分解求组合数)

    考虑到每个数的最小的质因数$ \geqslant 2$,因此极限复杂度为$O(n log n)$

    attack
  • POJ - 3074 Sudoku (搜索)剪枝+位运算优化

    In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 ×...

    风骨散人Chiam
  • HDU 1867(kmp应用)

    Generally speaking, there are a lot of problems about strings processing. Now yo...

    dejavu1zz

扫码关注云+社区

领取腾讯云代金券