当前位置:网站首页 > 技术博客 > 正文

结构体默认初始化



当定义结构体变量时,可以通过两种方式初始化它:使用初始化列表或构造函数

初始化结构体变量成员的最简单的方法是使用初始化列表。初始化列表是用于初始化一组内存位置的值列表。列表中的项目用逗号分隔并用大括号括起来。

例如,假设已经声明了以下 Date 结构体:

 
  

定义和初始化 Date 变量的方式是:先指定变量名,后接赋值运算符和初始化列表,如下所示:

 
  

该声明定义 birthday 是一个 Date 结构体的变量,大括号内的值按顺序分配给其成员。所以 birthday 的数据成员已初始化,如图 2 所示:
在这里插入图片描述
也可以仅初始化结构体变量的部分成员。例如,如果仅知道要存储的生日是8月23日, 但不知道年份,则可以按以下方式定义和初始化变量:

 
  

这里只有 day 和 month 成员被初始化,year 成员未初始化。但是,如果某个结构成员未被初始化,则所有跟在它后面的成员都需要保留为未初始化。使用初始化列表时,C++ 不提供跳过成员的方法。以下语句试图跳过 month 成员的初始化。这是不合法的。

 
  

还有一点很重要,不能在结构体声明中初始化结构体成员,因为结构体声明只是创建一个新的数据类型,还不存在这种类型的变量。例如,以下声明是非法的:

 
  

因为结构体声明只声明一个结构体“看起来是什么样子的”,所以不会在内存中创建成员变量。只有通过定义该结构体类型的变量来实例化结构体,才有地方存储初始值。

虽然初始化列表易于使用,但它有两个缺点:

  1. 如果有某个成员未被初始化,那么在这种情况下,跟随在该成员后面的成员都不能初始化。
  2. 如果结构体包括任何诸如字符串之类的对象,那么在许多编译器上它都将无法运行。

在这些情况下,可以使用构造函数来初始化结构体成员变量,这和初始化类成员变量是相同的。与类构造函数一样,结构体的构造函数必须是与结构体名称相同的公共成员函数,并且没有返回类型。因为默认情况下,所有结构体成员都是公开的,所以不需要使用关键字 public。

以下是一个名为 Employee 的结构体的声明语句,它包含一个具有两参数的构造函数,以便在创建一个 Employee 变量而不向其传递任何参数时,提供默认值:

 
  

在建立结构体数组时,如果只写了带参数的构造函数将会出现数组无法初始化的错误
下面是一个比较安全的带构造的结构体示例

 
  

                            

  • 上一篇: windows update 拒绝访问
  • 下一篇: tls 解密
  • 版权声明


    相关文章:

  • windows update 拒绝访问2025-06-23 11:01:05
  • assocstats函数2025-06-23 11:01:05
  • rrt路径平滑算法2025-06-23 11:01:05
  • uboot bootz2025-06-23 11:01:05
  • 代码对比工具有哪些2025-06-23 11:01:05
  • tls 解密2025-06-23 11:01:05
  • 游戏编程教学入门教程2025-06-23 11:01:05
  • matlab常见函数命令2025-06-23 11:01:05
  • 文件上传前端怎么写2025-06-23 11:01:05
  • python中class语句2025-06-23 11:01:05