——分门别类是简化事物最有效的方式。

类型是C++语言的基础,对象类型决定了能对该对象进行的操作。

一、基本内置数据类型

C++预先定义的基本内置数据类型是构造世界万物的原子,数据类型告诉我们数据的意义以及我们能在数据上执行的操作。

1、 数据的分类

C++把所有的数据抽象为以下几种基本类型:

1) 数字(包括整型和浮点型)

2) 符号(字符型)

3) 逻辑(布尔型)

我们可以利用这些基本数据类型构造出所有我们需要的更复杂的数据类型。

2、 数据的操作

C++以运算符的简洁形式提供了基本内置类型最常用的操作。一个运算符就是一个功能函数,因此学习运算符需要了解三点:输入形参、返回类型和功能。运算符的简洁形式大大简化了表达式的书写,但形式的简化不该损失必要的信息。为了正确理解表达式的含义,我们需要了解运算符形式外的规则:优先级、结合律和运算对象求值顺序。

二、参数传递方式的类型抽象

1、参数的传递有两种方式

1) 拷贝副本

2) 使用原本

C++语言是特别注重运行效率的,因而总是使用拷贝副本的方式是不够的。全局变量的使用虽然可以不用拷贝副本,但它带来的副作用太大(变量名字冲突、程序间出现耦合以及数据的安全风险)。因而有了指针类型和引用类型。指针和引用使我们可以直接使用数据的原本,而又可以避免使用全局变量时的弊端。

2、指针类型和引用类型的比较

指针类型是通过保存变量在内存中的地址来实现对变量的间接访问,因而有两个弊端:

1) 效率低

需要为指针额外开辟内存空间来保存地址。

2) 安全风险

变量是类型的实际载体,而在内存空间上并没有类型的概念,因而无效的地址,会带来安全风险。

引用只是变量的别名,并不是一个对象,因而很好地规避了指针以上的两个缺点。所以,现代C++编程,建议使用引用类型,而尽量避免使用指针类型。

三、读写属性的类型抽象

对于一个基本类型(或者把其看作基本类型)的变量,其读写状态分为三种:

1) 不可读(即不可见)

2) 仅可读

3) 可读写

由于对于一个基本类型的变量,不可读是完全没有意义的(不会使用到,则存在无意义)。因而只剩下了两种状态:仅可读和可读写。C++语言用常量类型(const)表示变量是仅可读的,而用非常量类型(默认类型)表示变量是可读写的。

四、类型转换

分门别类是简化事物最有效的方式,但事物间往往是存在联系的,因而C++语言允许类型转换。

类型转换打破了类型间的壁垒,构筑了类型间交流的桥梁,但同时也带来了安全风险。为了保证(希望而已,非绝对保证)类型间的转换具有一定的意义(类型之间真的存在联系)和转换过程的安全可靠,C++语言把变量类型的转换明确分为三类:

1) 变量值(内容)的类型转换(static_cast)

通过创建一个临时对象来得到变量值在另一种类型中的对应。因而相对安全一些,所以限制比较松,但这里也可以看出,类型转换可能会带来一定的运行效率损失。

2) 变量读写性质的类型转换(const_cast)

对变量值的读写性质转换是没有意义的,因而const_cast只能改变运算对象的底层const(指向常量对象的引用或者指针)。变量读写性质的改变涉及到数据的安全性,因而const_cast通常只用在一种情况下:函数的声明参数在形式上需要一个非常量对象,而函数实际上并不改变实参的内容。

3) 变量内存空间的类型转换(reinterpret_cast)

一国不可二主,一山难容二虎。同样的道理,不应该对一个实体施加同一级别的两种规则,否则必然造成混乱,甚而带来危险。reinterpret_cast的用途有限,仅用于特殊场合,而且也只是进行读操作,尽量不要进行写操作。读操作只会使读取结果无意义,而写操作则会破坏该变量的原始数据,甚至变量邻近的重要数据。

C++语言中的类型(一)的更多相关文章

  1. C语言中不同类型的循环(Different types of loops in C)

    C语言中有三种类型的循环:for,while,do-while. while循环先判断循环条件. while (condition) { //gets executed after condition ...

  2. C++语言中的类型(二)

    --分门别类是简化事物最有效的方式. C++语言的强大能力的体现在对程序员自定义数据类型的支持.C++语言主要的一个设计目标就是让程序员自定义的数据类型像内置类型一样好用. 一.自定义数据类型 数据类 ...

  3. php弱类型语言中的类型判断

    1.php一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较.PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0. 例如:123abc转换后 ...

  4. C语言中不同类型的数据转换规则

    不同类型数据间的混合运算与类型转换 1.自动类型转换 在C语言中,自动类型转换遵循以下规则: ①若参与运算量的类型不同,则先转换成同一类型,然后进行运算 ②转换按数据长度增加的方向进行,以保证精度不降 ...

  5. C#语言中的类型转换方法(unfinished)

    一.C#中的数据类型 1.数值类型 2.字符类型 3.字符串类型 4.布尔类型 5.枚举类型 6.Object类型 二.常见的类型转换 从转换方式的角度,类型转换分为隐式转换与显式转换两种. 其中,隐 ...

  6. 关于C语言中不同类型数据进行计算 有符号和无符号数进行计算

    float是8个有效位, 做个试验: 输出如下: 上面说明了什么: 1, 18/2.2 是除不尽的, 因为是define,所以没有给ratio变量赋值类型,但是从sizeof输出的结果是8,所以系统默 ...

  7. c语言中各个类型的sizeof长度

    #include <stdio.h> int main() {     printf("\nA Char is %lu bytes", sizeof( char )); ...

  8. Go 语言中的方法,接口和嵌入类型

    https://studygolang.com/articles/1113 概述 在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?我们猜一下,可能有两个问题: 编译器会 ...

  9. 【转】C语言中不同的结构体类型的指针间的强制转换详解

    C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险.只要理解了其内部机制,你会发现C是非常灵活的. 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在 ...

随机推荐

  1. scala配置intellij IDEA15.0.3环境及hello world!

    1. Intellij IDEA Scala开发环境搭建 Intellij IDEA 15.0.3 默认配置里面没有Scala插件,需要手动安装,在Intellij IDEA 15.0.3 第一次运行 ...

  2. Web安全学习笔记(一)

    Web安全学习笔记(一): URL协议 HTTP协议 1. URL 2. HTTP协议 什么是HTTP HTTP的工作原理 HTTP报文 什么是Cookies HTTP请求方式 Referer请求的功 ...

  3. Java实用知识记录 —— 截止到Java8

    记录Java实用知识点,截止(包括)到Java8,只作概要的描述,不涉及到具体细节.变量:int.long的包装类支持无符号位操作,即其在内存中的位可以用来全部表示正数."_"可以 ...

  4. 【转】各种图(流程图,思维导图,UML,拓扑图,ER图)简介

    原文地址:各种图(流程图,思维导图,UML,拓扑图,ER图)简介 流程图 1.定义:流程图是对过程.算法.流程的一种图像表示,在技术设计.交流及商业简报等领域有广泛的应用. 2.案例 3.计算机语言只 ...

  5. LINUX 笔记-read命令

    作用:读入值给变量 1.read  从键盘读入字符到name变量 2.read -p 'msg' var... 输入提示 3.read -s vars 隐藏输入 4.read读取文件时,每次调用会读取 ...

  6. Java基础笔记13

    1.集合与对象数组的区别 集合与对象数组共同点:都是存放对象的容器: 区别在于:①集合是没有长度限制的:②集合容器中没有类型的限制. 2.集合(都在Java.util包下) 常用的集合:Collect ...

  7. SIP简介,第1部分:SIP初探

    说明:以下内容来着之前下载的一份文档,现将概念部分摘录在BLog,完成文档将放在文件中. SIP简介,第1部分:SIP初探 时间:2006-04-07作者:Emmanuel Proulx浏览次数: 2 ...

  8. 【译】Java中的字符串字面量

    原文地址:https://javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html 作者:Corey McGlone 让我们由一个简 ...

  9. stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结

    stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结 1. auto_ptrauto_ptr主要是用来解决资源自动释放的问题,比如如下代码:voi ...

  10. HDU 4135 Co-prime(容斥+数论)

    Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...