第二章---变量和基本类型

来源:互联网 发布:如何导出淘宝客户资料 编辑:程序博客网 时间:2024/06/05 07:43

2.1、基本内置类型

c++定义了一组表示整数、浮点数、字符、布尔值的算术类型,还定义了一种称为void的特殊类型,void没有对象的值,尽在一些有限的情况下使用,通常用在无返回值的函数的返回类型。

下述表中列出了c++中内置算术类型和其对应的最小的存储空间、

类型含义最小存储空间bool布尔类型---char字符型8位w_char宽字符型16位short短整型16位int整型16位long长整型32位float单精度浮点型6位有效数字double双精度浮点型10位有效数字long double扩展经度浮点型10位有效数字其中,整数、字符和布尔值的算术类型成为整型,其中字符有char和w_char两种类型,char通常是单个机器的字节byte,其中c++中无java中byte类型,byte相当于unsigned char。在32位机器上,int和long的位数是一样的,都是32位,通常short表示半个机器字长,int一个,long一个或者两个。除了bool以外,整型可以带符号的signed,也可以是无符号的unsigned,int、long、shot默认都是带符号的,若要指定为无符号的,则要在类型前面加unsigned。其中unsigned默认指的是unsigned int类型。对超过整型类型能表示的数值赋值的时候,采取对其取模运算,这样,把负数复制给无符号类型也是合法的,因为要对其进行取模运算。

浮点型:

使用double类型基本上是不会有错的,使用float类型中隐式的精度损失是不可忽视的,而双精度计算的代价相对于单精度可以忽略,事实上,在有些机器上,时候double类型要比float类型要快的多,而long double提供的精度同城没有必要,而且还要承担额外的运算代价。

字面值常量:

以0(零)开头的字面值整数通常表示八进制,0x或者0X开头的表示十六进制。定义长整型时候,应该用大写字母L,小写字母很容易与1想混淆。

默认的浮点字面值常量为double类型,在数值后面加F或者f表示单精度,加L或者l表示扩张精度。

字符型的字面值常量通常用一对单引号来定义,如   'a'、'2'、在字符字面值前面加上L就能得到w_char类型的宽字符字面值。

转移序列:

换行  \n  回车\r  报警\a   

字符串字面值:

除了上述基本的内置类型,还有一种字面值更为复杂,就是字符串字面值,通常用双引号括起来。如"hello world",为了兼容c语言,c++中所有字符串字面值都是由编译器自动在末尾加一个空字符。如字符字面值 'A' 仅仅表示一个A,而"A"表示包含了一个字母A和空字符两个字符的字符串。

在前面加一个L      如L"a wide string literal"同样以一个宽空字符结束。

字符串字面值的连接:

值得注意的是cout<< "multi-line"  L"literal"<<endl;  结果是未定义的,也就是说,连接不通类型的行为标准没有定义,在不通的编译器下程序可能有不同的结果。

多行字面值:

如下是合法的:

std::cou\

t<<"hi"<<st\

d::endl;

但注意,\ 后面不准有空格或者注释。



2.3变量:

左值:既可以出现在赋值语句的左边,也可以出现右边,右值:只能出现在赋值语句的右边

如变量就是左值,数字字面值是右值。

变量:

变量必须以字母或者下划线开头,其中不能连着两个下划线,下划线后面不能跟着大写字母。

命名习惯:变量名一般用小写,

定义对象:

初始化有两种方式,直接初始化和复制初始化,要注意的是,初始化不是复制,初始化包括对象的创建和赋值,在类类型初始化的时候,复制初始化和直接初始化有很微妙的关系。如下:string titlea = "hello world";跟String titleb = "hello world";两个指向都是hello world的副本。(这个原理貌似跟java中的有些相似)。

规则:

位于函数体外的内置变量在都初始化为0,位于函数体内的内置变量无初始化,使用未初始化的变量将会发生不可预见的行为,因为不知道变量里面存放的是什么

声明和定义

extern 声明变量而不定义它,可以多次声明,但只能有一次定义,声明并不分配内存空间,如果声明阶段定义了,就表示定义,在此之后就不能再声明,

变量的作用域

局部变量若与全局变量重名,则在局部变量的作用域范围内,覆盖全局变量。

const限定符

const对象在定义的时候,一定要初始化,在多个文件中,非const对象默认为extern,const对象则需要在前面显示的添加extern。

引用

引用是别名,和被引用的对象所指的对象一样。非const引用要与被引用对象的类型相同,const引用要求与被引用对象的类型相关即可。

typedef

别名,格式如下 typedef double num

枚举

用关键字enum表示,后一个值要比前一个值大一,值可以是重复的,如下 enum points{ point2d=2,point2w,point3D=3,point3w};point2w和point3D的值都为3

类类型

通常在类的花括号后面加一个;

c++中struct和public唯一的区别在于默认的成员访问权限不一样,struct默认的是public,二class默认的是private

预处理

#ifndef A

#define B

#endif 测试A是否定义,如定义则结束,若没有定义则之后define后面的代码 独用在头文件中,若头文件多次包含,则会出现难以理解的编译错误

原创粉丝点击