C++ 声明、定义、初始化、赋值

C++ 声明、定义、初始化、赋值

参考来源:《C++ primer(第五版)》

    在C++中,有以下几个概念一直都让人云里雾里。实际上,在学习语言的过程中,对每个概念了解清晰是非常重要的。

    下面就让我们来理清这些概念


声明和定义

    首先我们要区分 声明定义 的区别。

在《C++ primer(第五版)》中写道:

C++语言支持分离式编译,该机制允许将程序分割成若干个文件,每个文件可被独立编译。
为了支持分离式编译,C++语言将声明和定义区分开来。 声明 使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而 定义 负责创建与名字关联的实体。
变量 声明 规定了变量的类型和名字,在这一点上定义与之相同。但是除此之外,定义 还申请存储空间,也可能会为变量赋一个初始值。

    也就是说:

  • 声明:只是规定了变量的类型和名字,而没有进行内存分配。
  • 定义:不仅规定了变量的类型和名字,而且进行了内存分配,也可能会对量进行初始化。

    显然,定义完成的任务比声明更多。并且,一个变量只有经过定义,才能够被使用。如果只有声明没有定义,那么变量将不能被使用(排除在其他文件被定义的情况)。其实也很好理解,没有内存空间的变量,可以使用么?显然不可以。

    对于变量,如果我们只想声明,不想定义的话(比如在另一个文件中定义了),那么我们可以这样写:

int a;                      //声明并定义a
extern int a;               //extern表示声明但不定义a。
extern int a = 2;           //任何包含了显示初始化的声明就成了定义

初始化和赋值

  • 初始化:当对象在创建时获得了一个特定值。
  • 赋值:擦除原有的值,并赋予新值。

    两者的区别其实就是在创建时给值,还是创建后给值。

int a = 2;                  //初始化
a = 3;                      //赋值

一个小细节

    对于int a = 2;我们可以很明显地分析这句话是声明并定义了变量a,并将a初始化为2。

    但是对于int a;这句代码,我们该怎么分析呢?

    首先这句代码声明并定义了a,但是它到底有没有进行初始化呢?

    还记得我之前说定义有可能初始化么,其实这个初始化不仅包括显式初始化,而且包括默认初始化。

    但是默认初始化又与变量的类型和变量所在的位置有关:

  • 当变量为自定义类类型:调用自身的默认构造函数进行初始化。
  • 当变量为内置类型时:
    • 该变量定义在函数体外时,将被初始化为0。
    • 该变量定义在函数体内时,将不会进行初始化。

    所以对于int a;这行代码是否进行初始化,还跟其所在的位置有关。

  • 23
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值