概念

  • 变量,是拥有一个名字且可以供程序操作的存储空间
  • 变量的类型决定了它所占空间大小和布局方式,以及可以参与的运算
  • 对 c++ 来说,变量和对象一般可以互换使用(即声明一个变量说成声明一个对象)
  • 对象是指一块能存储数据并且具有某种类型的内存空间

初始值

  • 初始化不是赋值,其含义是在创建变量时(申请内存时)赋予它一个初始值
  • 而赋值的含义是,把变量(或对象)当前值擦除,而以一个新值来代替

列表初始化

特点,在使用列表初始化的同时,如果这个初值存在被丢弃信息的危险,则编译器会报错


1
2
3
int sold = {0};
int sold {0};
int sold (0);

其中花括号被得到了全面应用
这三条语句可以说等价于 int sold =0;

声明和定义之间的关系

C++ 支持分离式编译机制,即允许将程序分割为若干文件,每个文件可被独立编译
因此,也提供在文件之间共享代码和变量的方法
以浅显的角度讲:

  • 声明,是让程序知道有该名字的一个变量
  • 一个文件如果想使用另一个文件中的变量,则必须包含(include)那个名字的声明
  • 定义,是负责创建与名字关联的实体

以变量的角度讲:

  • 声明规定了变量的类型和名字
  • 定义则会申请存储空间,同时还可能被副一个初始值

一般情况下,当在声明变量的同时也被定义
如果只想声明而非定义它(即不创建内存空间)时,应使用 extern 且不能显式初始化变量


例:
1
2
extern int i; 只声明 i 这个名字,然而并不为它创建内存空间
int i; 声明 i 这个名字并创建内存空间,其值如果未被初始化,则是垃圾值

  • 如果包含了初始化的 extern 声明则会产生抵消作用变成定义
  • 函数体内部如果声明一个 extern 变量将会引发错误
  • 变量只能被定义一次(即只能在一个地方创建内存空间)
  • 但变量可以被多次且不同地方声明,要避免重复定义
  • 在多文件中,变量只能在一个文件中出现定义,
    而其他用到该变量的文件必须包含它的声明才可使用

本文永久连接: http://www.guib.in