六一的部落格


关关难过关关过,前路漫漫亦灿灿。




基本概念


数据类型

类型决定了对象在内存空间的布局方式和占用的大小,该空间能存储的数值范围,以及对象能参与的运算


对象

内存的一块区域,具有某种类型


变量

  • 为对象命名; 命名的对象或引用
  • 对应一个明确对象
  • 先声明后使用

声明和定义

C++支持分离式编译 separate compilation 机制, 该机制允许将程序分割为若干个文件, 每个文件可被独立编译


声明

声称存在一个变量、函数或是别处定义的类型


定义

创建与名字关联的实体

定义函数

定义变量: 为某一特定类型的变量申请存储空间, 可以赋初值


extern关键字

变量

无关键字extern即定义,无须声明

有extern无初始化,仅声明

有extern且初始化,为定义


说明

  1. 名字必须在定义或声明之后才能使用
  2. 声明和定义对类型和名字进行了统一
  3. 任何包含了显式初始化的声明就变成了定义
  4. 变量能且只能被定义一次,但可以被多次声明

初始化和赋值

两个不同的概念


(显式)初始化

创建对象并对其赋初值

建议定义对象时对其进行显式初始化


默认初始化

定义变量而未对其赋初值

按对象的生命周期和是否为类类型分开讨论:

  1. 具有全局作用域: 将内置类型对象初始化为0; 对类类型对象调用默认构造函数

    值初始化

  2. 具有局部作用域: 内置类型对象不被初始化, 拥有未定义初值; 对类类型对象调用默认构造函数

    试图访问拥有未定义初值的对象将引发未定义行为

    未定义: C++没有明确规定的情况

默认初始化类类型对象: 要求该类型拥有默认构造函数; 对对象调用默认构造函数


赋值

抹去对象的当前值并写入新值


数据类型



基本概念


数据类型

类型决定了对象在内存空间的布局方式和占用的大小,该空间能存储的数值范围,以及对象能参与的运算


对象

内存的一块区域,具有某种类型


变量

  • 为对象命名; 命名的对象或引用
  • 对应一个明确对象
  • 先声明后使用

声明和定义

C++支持分离式编译 separate compilation 机制, 该机制允许将程序分割为若干个文件, 每个文件可被独立编译


声明

声称存在一个变量、函数或是别处定义的类型


定义

创建与名字关联的实体

定义函数

定义变量: 为某一特定类型的变量申请存储空间, 可以赋初值


extern关键字

变量

无关键字extern即定义,无须声明

有extern无初始化,仅声明

有extern且初始化,为定义


说明

  1. 名字必须在定义或声明之后才能使用
  2. 声明和定义对类型和名字进行了统一
  3. 任何包含了显式初始化的声明就变成了定义
  4. 变量能且只能被定义一次,但可以被多次声明

初始化和赋值

两个不同的概念


(显式)初始化

创建对象并对其赋初值

建议定义对象时对其进行显式初始化


默认初始化

定义变量而未对其赋初值

按对象的生命周期和是否为类类型分开讨论:

  1. 具有全局作用域: 将内置类型对象初始化为0; 对类类型对象调用默认构造函数

    值初始化

  2. 具有局部作用域: 内置类型对象不被初始化, 拥有未定义初值; 对类类型对象调用默认构造函数

    试图访问拥有未定义初值的对象将引发未定义行为

    未定义: C++没有明确规定的情况

默认初始化类类型对象: 要求该类型拥有默认构造函数; 对对象调用默认构造函数


赋值

抹去对象的当前值并写入新值