我读C++ Primer - 基本类型与变量

来源:互联网 发布:linux自启动脚本编写 编辑:程序博客网 时间:2024/05/01 19:38

数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作。

本章主要介绍C++ 基本类型,从内置类型如int double,到复合类型如 指针 引用,还有自定义数据结构。其他内容有变量的声明定义,const 限定符等。


1  基本内置类型

C++ 内置类型主要有:

算术类型:整型,浮点型,字符型,布尔型。

空类型:    void 

类型含义最小尺寸bool布尔类型未定义char字符8位wchar_t宽字符16位char16_tUnicode字符16位char32_tUnicode字符32位short短整型16位int 整形16位long长整形32位long long长整形64位float 单精度浮点6位有效数字double 双精度浮点10位有效数字long double 扩展精度浮点10位有效数字



















算术类型的尺寸在不同的机器上有所差别,所以只给出了最小尺寸。

这些基本类型大都还有带符号和无符号类型两种。使用无符号类型如:unsigned int ,指大于0的整型,且范围加倍。

如何选择类型:1 明确知道数值不为负时,用无符号类型  2 整数用int ,浮点用double

类型的转换。程序一般会自动转换,但是可能会丢失信息,如:

double num = 30.0;int i = num;
另外,当赋给无符号类型一个超出范围的值时,结果是未定义的,所以切勿混用带符号和无符号类型,并对类型的范围了然于胸。

字面值常量

整型主要有十进制,八进制(以0 开头),十六进制(以0x 开头)。

字符和字符串字面值:单引号括起来的为char 型字面值,双引号括起来为字符串字面值(实际是由常量字符构成的数组,末尾自动添加 '\0')。

转义序列:

\n  换行符 

\v  纵向制表符

\r  回车符
\f 进纸符

\t 横向制表符 

\a 响铃符 

\b 退格符

其他特殊字符都需要用\ 来转义。

2 复合类型

复合类型是指基于其他类型定义的类型,主要有引用和指针。

引用。引用为对象起了另外一个名字,指向另外一种类型,所以引用必须被初始化。定义引用如下:

int ival = 1024;int &refVal = ival;
指针。指针是指向另外一种类型,无须定义时初始化。定义指针如下:
int *p1;int ival = 1024;int *p2 = &ival;

指针的使用:1 初始化。虽然定义指针时可以不被初始化,但是初始化所有指针无疑能防止许多错误 2 利用指针访问对象,如:cout<<*p2;  3 结束使用之后赋空。空指针不指向任何对象,方法为 int *p1 = nullptr; 或者 int *p2 = 0;

3 自定义数据类型

主要有结构体和类。其唯一区别是结构体默认访问限制为public,而类为private。

定义一个结构体:

struct Clock{    int hour;    int minute;};
确保头文件多次包含的技术为预处理器。其中一项功能是头文件保护符,如下:
#ifndef CLOCK_H#define CLOCK_Hstruct Clock{    int hour;    int minute;};#endif
良好的习惯应该在每一个自己的头文件中都加入此头文件保护符。

变量

初始化和赋值不同。初始化比声明空对象之后赋值效率更高。

C++ 11 支持列表初始化,如:

int num = 0;int num = {0};int num{0};
如果定义变量时没有指定初值,则变量会被默认初始化(一般为 0)。所以建议定义变量时就初始化,并且在要用到变量的时候才定义。

C++ 支持分离式编译,允许将程序分割成多个文件,可独立编译。这样如果我想使用另一个文件中的变量呢?如下:

extern int i;
这是声明此变量,如果赋值就成为了定义。

变量命名规范:1 有实际意义 2 一般用小写字母 3 自定义类名用大写字母开头 4 标识符若由多个单词组成,用下划线或大写字母隔开

const 限定符

使用const 定义的变量,它的值不能被改变,所以定义时必须初始化,如:

const int bufSize = 512;

const还可用于定义函数与类成员函数,这个以后用到再说。

处理类型

类型别名。使用typedef 或者using 声明给类型起别名,如:

typedef unsigned int   uint;typedef unsigned short uint16;typedef unsigned long  uint32;using SI = sales_item;

C++ 11 新标准中auto 类型说明符能让编译器自动推导类型,所以也必须有初始值,如:

auto i = 0;
新标准中还有decltype 说明符选择并返回操作数的数据类型类型,如:
decltype (f()) sum = x;


0 0
原创粉丝点击