C++基础系列一:变量和基本类型

C++基础系列主要罗列C++语言的一些基础知识,供基础不牢、记忆模糊和概念混淆时快速查询所用,该系列的章节按照C++ Primer中文版第四版进行整理。

(1)基本内置类型

C++中基本的内置类型包含整型和浮点类型两种。

整型:整数、字符和布尔值,其中整数类型中short, int, long占用的存储空间分别为半个机器字长、一个机器字长、一个或两个机器字长,32位机中int和long类型通常都是一个机器字长;字符有char和wchar_t两种,char类型通常是单个机器字节(8位),wchar_t是宽字符型,通常占用的最小空间为16位,用于扩展字符集,如汉字或日语,这些字符集中的一些字符不能用单个char表示;bool类型表示真值true和false,可以将算术类型的任何值赋给bool对象,0值算术类型表示false,任何非0表示true。

浮点类型:float, double和long double分别表示单精度浮点数、双精度浮点数和扩展精度浮点数,一般float类型用一个字(32位)表示,double类型用两个字(64位)表示,long double类型用三个或四个字表示。

将10种基本内置类型罗列如下:

  类型 含义 最小存储空间
整型 bool 布尔型  
char 字符型 8

wchar_t

宽字符型

16

short 短整型 16
int 整型 32
long 长整型 32或64
浮点类型 float 单精度浮点类型 32
double 双精度浮点类型 64
long double 扩展精度浮点类型 96或128

(2)变量初始化规则

内置类型变量的初始化:内置类型变量是否自动初始化取决于变量定义的位置,全局变量都初始化为0,局部变量不进行自动初始化,此时变量除用作赋值操作符的左值外的用途都是未定义的,会导致程序运行时崩溃;

类类型变量的初始化:类类型的变量必须初始化,初始化方式可以是显示的调用构造函数或隐式的调用默认构造函数。

(3)声明和定义

定义:定义用于为变量分配存储空间,还可以为变量指定初始值,在一个程序中,变量有且仅有一个定义;

声明:声明用于向程序表明变量的类型和名字,定义也是声明;可以通过关键字extern声明而不定义变量,它也不分配存储空间,它只是说明变量定义在程序的其他地方;程序中变量可以声明多次,但只能定义一次。

只有当声明也是定义时,声明才可以有初始化式,因为初始化式必须要有存储空间,而只有定义才分配存储空间,因此下面的语句即使有extern关键字也仍是定义:

extern double pi = 3.14;

此后再次定义pi就是错误的:

double pi;//error!! redefinition!
extern double pi = 3.1416;//error!! redefinition!

 (4)const对象默认为文件的局部变量

在全局作用域中的非const变量,只要做了合适的声明,在整个程序中都可以访问;但是在全局作用域中声明的const对象则是定义该对象的文件的局部变量,此变量只存在于当前文件中,不能被其他文件访问,此时可以通过在定义const变量时就将其指定为extern来使整个程序都可以访问const对象。示例如下:

1 //non-const 
2 int counter; //definition in file1.cpp
3 extern int counter; //declare in file2.cpp
4 
5 //const
6 extern const int MaxLen = 100//definition in file1.cpp
7 extern const int MaxLen;//declare in file2.cpp

(5)引用
引用就是对象的另一个名字,不能定义引用类型的引用,非const引用必须用与该引用同类型的对象初始化,初始化是指明引用指向哪个对象的惟一方法。

int ival = 1024;
int &refVal = ival;    //ok
int &refVal2;    //error:a reference must be initialized
int &refVal3 = 10;    //error:initializer must be an object

对const对象的引用必须使用const引用,但是const引用可以初始化为不同类型的对象或右值,如下:

 1 const int val = 1024;
 2 const int &refVal = val;//ok
 3 int &refVal = val;//error
 4 
 5 
 6 //the below is all ok
 7 int i = 42;
 8 const int &r = 42;
 9 const int &r2 = r + i;
10 
11 double val = 3.14;
12 const int &ri = val;

(6)枚举
枚举定义如下所示:

enum open_modes{ input, output, append };

默认,第一个枚举成员赋值为0,后面的枚举成员依次递增。枚举成员是常量,初始化枚举成员的值必须是常量表达式。

原文地址:https://www.cnblogs.com/sophia-yun/p/3152613.html