C++ primer 第二章 变量和基本类型

目录

2.1基本内置类型

2.1.1 带符号类型与无符号类型

2.1.2 字面值常量

2.2变量

2.2.1 变量的定义

2.2.2 变量声明和定义的关系

2.2.3 名字的作用域

2.3 复合类型 

2.3.1 引用

2.3.2 指针      

2.4 const限定符

2.4.1 const的引用

  2.4.2 const和指针

2.4.3 顶层const

 2.4.4 constexpr和常量表达式


2.1基本内置类型

        c++的基本数据类型包括算术类型和空类型,其中算术类似包含字符,整型数,布尔值和浮点数。

2.1.1 带符号类型与无符号类型

  •         带符号类型可以表示正数,负数或0,无符号类型只能表示大于0的值
  •         类型int,short,long都是带符号的,可在这些类型名前加unsigned得到无符号类型。

2.1.2 字面值常量

  •         一个形如42的值被称为字面值常量,这样的值一望而知,每个字面值常量对应一种数据类型。

2.2变量

2.2.1 变量的定义

  • 当对象在创建时获得了一个特定的值,我们说这个对象被初始化了

2.2.2 变量声明和定义的关系

        声明:使得名字为程序所知

        定义:负责创建与名字关联的实体。

        变量声明规定了变量的类型和名字,这一点上与定义相同,但除此之外,定义还申请存储空间,也可能为变量赋初始值。

2.2.3 名字的作用域

        全局变量与局部变量的覆盖关系

#include
int reused=42;   //拥有全局作用域
int main()
{
    int unique=0;   //unique拥有块作用域
    cout<

2.3 复合类型 

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

2.3.1 引用

        引用为对象起了另外一个名字,程序把引用和他的初始值绑定在一起,而不是将初始值拷贝给引用

int ival=1024;
int &refval=ival;  //refval指向ival,是ival的另一个名字
int &refval2;     //报错,引用必须被初始化

        (1)引用即别名

                引用并非对象,只是将一个已经存在的对象所起的另外一个名字,定义引用之后,对其所有的操作都是在与之绑定的对象上进行。

refval=2;  //把2赋给refval指向的对象,此处即是赋给了ival
int ii=refval;  //与ii=ival的结果一样

          

2.3.2 指针      

        指针和引用的区别:

         引用本身并非一个对象,一旦定义了引用,就无法令其再绑定到其他对象,之后每次使用这个引用都是访问他最初绑定的那个对象

        指针本身是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内他可以先后指向几个不同的对象。指针无须在定义时赋初值。

        引用本身不是一个对象,因此不能定义指向引用的指针,但指针是对象,所以存在对指针的引用。

2.4 const限定符

        对一个变量进行限定,const对象一旦创建后,其值就不能改变,所以const对象必须初始化

2.4.1 const的引用

        将引用绑定到const对象上,就像绑定到其他对象上一样,称为对常量的引用,对常量的引用不能被用作修改它所绑定的对象。

const int ci=1024;
const int &r1=ci;
r1=42;  //错误,r1是对常量的引用,不可通过对引用的改变,去改变ci
int &r2=ci    //错误,试图让一个非常量引用指向一个常量对象

  2.4.2 const和指针

        指向常量的指针,不能用于改变其所指对象的值,要想存放常量对象的地址,只能使用指向常量的指针。

const double pi=3.14;
double *ptr=π  //错误,ptr炜、为一个普通指针
const double *cptr=π//正确
*cptr=42;//错误,不能给*cptr赋值


double dval=3.14;
cptr=&dval;//允许一个指向常量的指针指向一个非常量对象

        常量指针必须初始化,而且一旦完成初始化,则他的值就不能改变了。

2.4.3 顶层const

         指针本身是不是常量以及指针所指的是不是一个常量是一个相互独立的问题。顶层const表示指针本身是一个常量,而底层const表示指针所指对象是一个常量。

 2.4.4 constexpr和常量表达式

        常量表达式是指不会改变并且在编译过程就能得到计算结果的表达式

        (1)constexpr变量   

        允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。

constexpr int mf=20;
constexpr int sz=size();//只有当size是一个constexpr函数时才是一条正确的声明

         (2)指针和constexpr

           在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针所指对象无关

const int *p=NULL;
constexpr int *q=NULL;

        上述定义中,p是一个指向常量的指针,而q是一个常量指针

        

    

你可能感兴趣的:(c++)