C++基本概念——常用基本内置类型

本文介绍了C++中的基本内置类型分类及其选择原则,并深入探讨了类型转换的方法,包括隐式类型转换和显示类型转换。

本文的主要目的是介绍C++基本内置类型的分类、实现、使用和类型转换相关的内容。

1. 基本内置类型的分类

基本内置类型的分类


(1) 关于这个分类,首先我们要弄明白为什么C++中要有类型的概念?

数据在计算机中都是按照01比特串的形式存储的,而数据类型决定了数据所占用的比特数。例如,C++中char常占8bit,而int常占16bit,不同的数据类型占用不同的比特数目。其次,数据类型也决定了计算机如何解释这些比特的内容。例如,对于float类型而言,不同的机器实现方式有着很大的区别(此方面的详细细节可以参考《计算机组成与原理》中的相关内容)。从上面的分析,我们看以看出,实际上C++的数据类型实际上是对01比特串的一种抽象概括,有了数据类型的概念之后,计算机在01比特串上的操作将会更加的方便快捷。

(2)对于不同的数据类型,我们应该如何进行选择呢?

C++语言在设计之初,就尽可能在遵循接近硬件的原则,由于硬件本身的复杂性,也导致了C++数据类型的复杂性。复杂性和灵活性往往都是相对的,程序员应该尽可能的选用合适的数据类型,来简化相关操作。下面是计算机数据类型选择的经验准则:

  • 当明确知道数据类型不可能为负时,就选用无符号类型。
  • 使用int进行整数运算。
  • 在算数表达式中尽量不要使用char或者bool
  • 执行浮点数的运算选用double,这是因为float的精度通常太低,而且代价和double不相上下。

2.类型转换

(1)我们为什么需要类型转换?

在实际使用数据类型的过程中,我们不可避免的会遇到不同的数据类型的混合使用。例如,

int i=45;
 if(i)  //int converts to bool
 statement;

这种写法非常简洁,当然也可以使用if(i>0)的书写形式,但是显然不够简洁,美观。当然这只是使用类型转换的原因之一。再比如说,我们常常需要不同类型之间的四则运算,等等。

(2)怎样进行数据类型的转换?

对象的类型定义了对象包含的数据和能参与的运算,类型表示的范围决定了转换的过程,主要包括隐式类型转化和显示类型转换

①隐式类型转换

隐式类型转换指的是编译器自动执行的类型转换,这些类型会在编译器进行语句翻译的时候自动执行,常见的隐式类型转换有以下几种情况:

  • 整型提升,类型小的整型会提升为类型大的整型。例如,非布尔型到布尔型的转换,true为1,false为0。
  • 非布尔型到布尔型的转换,大于0为true,小于0为false。
  • 算术表达式或者关系表运算中的多种类型,需要转换为同一种类型。
  • 函数调用的时候也会发生类型转换
  • 数组转换成指针:大多数用到数组的表达式中,数组自动转换成指向数组元素的指针。

    int a[10];
    int *ip=a;
  • 无符号类型之间的转换,转换规则如下:
Created with Raphaël 2.1.0开始类型不一致?整型提升符号不相同?unsigned>=sign?sign转换成unsigned结束unsigned转化为sign小范围提升为大范围yesnoyesnoyesno

对于上图有以下几个方面需要注意:

——- 进行类型转化时,首先进行符号判断,进行整型提升,如果类型一致则结束,否则继续进行判断
——– 接着对两个相异符号的两个数的类型大小进行比较,将其中一个转换为表示范围大的。

  • 转换成常量
int i;
const int &j=i;
int &r=j;//错误,不能将const引用转换为非const
  • 类型定义的转换,类中定义的转换构造函数
①显示类型转换

显示类型转换指的是程序员指定的类型转换,往往存在类型损失。常见的形式有:
- static_cast,除去底层之外的const转换

int j=10;
double i=12.23;
double slope=static_cast<double>(j)/i;
  • const_cast,底层const
const char *ps;
char *pc=const_cast<char*>(pc);
  • reinterpret_cast
int *ip;
char *cp=reintepret_cast<char*>(ip);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值