现在的位置: 首页 > 综合 > 正文

C++ Primer学习第二天

2018年02月09日 ⁄ 综合 ⁄ 共 3157字 ⁄ 字号 评论关闭

第二章 变量和基本类型

    1、 类型确定了数据和操作在程序中的意思。

    比如:i = i + j;    的具体含义取决于i和j的类型。如果是int型的,则这就语句表示的是普通的“+”运算。如果i和j都是某一个类的对象,那么这条语句表示的就不是普通的“+”运算了,而是由该类定义的“+”操作。

    对于内存中的一块数据,要知道它的具体意义,必须知道它的类型。

    比如: 下面的内存块中

                   地址                数据 


                736424      0 0  0 1 1 0 1 1


                736425      0 1 1 1 0 0 0 1


                736426      0 1 1 0 0 1 0 0


                736427      0 0 1 1 1 0 1 1


 

    如果地址为736425的字节的类型是8为无符号整数,那么就可以知道该字节表示整数112。如果这个字节是ISO-Latin-1字符集中的一个字符,那它就表示小写字母q。虽然两种情况的位相同,但归属于不同类型,解释就不同。

    2、C++中的算术类型

类型                     含义                     最小存储空间


bool                     布尔型                  ——


char                     字符型                  8位


wchar_t               宽字符型             16位


short                    短整型                 16位


int                         整型                     16位


long                     长整型                  32位


float                     单精度浮点数       六位有效数字


double                双精度浮点数      10位有效数字


long double       扩展精度浮点数 10位有效数字


 

c++标准规定了每个算术类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。事实上目前int类型的存储空间一般都是32位的。

对于整型,包括int、short、long都默认为带符号数。就是说,如果你使用int、short、long声明了一个变量,那么这个变量默认是带符号数。要想声明无符号数,需要使用unsigned。比如:unsigned int a;声明了无符号数a。

由于各种类型的存储空间不同,它们所能表示的数值范围也就不同,存储空间越大,该类型所能表示的数值范围就越大。比如由32位的unsigned long型能够表示的数值范围是0——【(2的32次方)-1】,而16位的unsigned short能够表示的数值范围是0——【(2的16次方)-1】。如果把【(2的32次方)-1】这个数值赋给一个unsigned short类型的变量a,a肯定不能接受,因为它表示不了,它没那个能力。怎么办呢。目前大多数编译器的处理办法是:编译器会将该值(【(2的32次方)-1】)对unsigned short类型的可能取值数目取余。然后把取余的结果赋给变量a。也就是这个操作:【(2的32次方)-1】%(2的16次方)。

    3、变量初始化规则

         如果我们在定义变量时没有初始化该变量,那么系统有时候会帮助我们进行初始化。

        对于内置类型变量来说,如果该变量是在函数外定义的,那么系统会把该变量初始化为0;如果该变量是在函数内定义的,系统不进行自动初始化。

        对于类对象来说,如果没有使用构造函数去显示的初始化这个对象,就使用默认构造函数去初始化。

    4、const限定符

        使用const定义常量。

        常量必须在定义时初始化,并且不能修改。

        常量默认为文件的局部变量,也就是说,常量默认只能被自身所在的文件所访问,不能被其它文件访问。(对于非常量来说,如果在其它文件中做了声明extern,在其它文件中是可以访问它的)。如果要使const变量能够被其它文件访问,必须显示的指定它为extern。就是说在声明这个常量时要在前面加上extern。比如下面的应用:

//file_1.cc

//define and initializes a const that is accessible to other files

extern const int buffSize = 1000;

//file_2.cc

extern const int buffSize;//use buffSize from file_1

//uses buffSize defined in file_1

for(int index=0;index!=buffSize;++index)

..........................

    5、引用

        引用就是定义了变量的一个别名

        int a = 1;

        int &aa = a;

        aa = 2;

        std::cout<<a<<std::endl;

上面程序的结果是:2

意思就是说:对引用的操作就是对引用所指向的对象的操作。上例中我们为引用aa赋值2,就是对aa所指向的对象a赋值2,所以显示a的结果是2。

引用必须在定义是初始化,这点与const相同。引用所指向的对象不能也不可能更改。就是说一旦你把aa指向了a,就不能也不可能把aa执行其它的变量了。对于这一点,大家看下面的例子:

        int a = 1,b = 2;

        int &aa = a;

        aa = b;//这句话的意思不是改变aa所指向的对象,而是给aa所指向的对象也就是a赋值。

        aa = 3; //如果此时aa指向的是a,那么a=3,b=2,如果此时aa指向b,那么a=1,b=3

        std::cout<<"a="<<a<<std::endl;

        std::cout<<"b="<<b<<std::endl;

运行结果是:a=3;b=2;

这说明aa一直是指向a的,aa=b这条语句并没有更改aa所指向的对象。

const引用是指向常量的引用。不能把常量赋给一个非const引用。比如

const int val = 1024;

const int &refval = val;  //ok,both reference and object are const

int &ref2 = val;  //error,nonconst reference to a const object

 

这些就是我今天学到的,请大家指错。

                                                                                                                                                                                                                              StandMyGround(永远的菜鸟)

                                                                                                            2008-5-22

 

抱歉!评论已关闭.