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

From:https://blog.csdn.net/twdlll/article/details/78265348
其他参考链接:
参考链接1:https://www.cnblogs.com/lca1826/p/6505701.html
参考链接2:https://www.cnblogs.com/ayanamistltz/archive/2012/11/15/2771074.html
**定义:**是指为变量分配内存空间。
C++要求所有实体在任何翻译单元内必须有且只有一个定义。

**初始化:**是指为一个变量赋初值。
初始化可以和定义一起进行,如 int a = 10; ,也可以先定义变量,之后再初始化。

**声明:**是指告诉编译器变量的类型与细节,如声明一个类
声明可以是定义,也可以不是,取决于编译器的实现;
如main函数中的 int a; 是声明也是定义,因为编译器会分配内存空间并赋一个废值
而类声明里的 int a; 仅仅是声明,而不是定义,因为此时不会分配内存
C++ 声明、定义、初始化、赋值

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

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

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


声明和定义

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

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

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

    也就是说:

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

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

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

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

初始化和赋值

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

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

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

一个小细节

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值