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 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

Python内置函数sorted()和列表方法sort()排序规则不得不说的事

Python内置函数sorted()和列表方法sort()可以使用key参数指定排序规则,并且都是稳定排序,也就是说,对于指定规则不能涵盖的元素,本来谁在前面,...

27630
来自专栏北京马哥教育

Python数据类型知识点全解

作者:zhang_derek 1.字符串 字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 ...

30750
来自专栏haifeiWu与他朋友们的专栏

Python基础(一)

以#开头的语句是注释,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。

16650
来自专栏WD学习记录

python 浅拷贝 深拷贝

2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。

12720
来自专栏章鱼的慢慢技术路

多维数组的传递

16440
来自专栏ml

nyoj-----前缀式计算

前缀式计算 时间限制:1000 ms  |           内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我...

34760
来自专栏玄魂工作室

输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字

要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和...

26110
来自专栏Android干货

Python高级特性:迭代

--------------------------------------------------------------------------------...

8710
来自专栏desperate633

LintCode 编辑距离题目分析代码

给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。

10120
来自专栏天天

数据类型的转换

12430

扫码关注云+社区

领取腾讯云代金券