如何将结构中的所有内容都设置为0

how to set everything inside a structure to 0?

本文关键字:设置 结构      更新时间:2023-10-16

我有一个结构,其中有3种不同类型的值(char、float、int)。。。。。。。我需要在程序开始时将所有内容设置为0。我该怎么做?

通常有两种方法:

A a = A();

A a = {};

第一种方法的优点是,如果您稍后提供构造函数,它仍然有效(只要您提供默认值构造函数)。

关于使用memset的建议:memset只是保证适用于积分类型。我无法想象为float工作,但在形式上,这并不能保证。和当然,如果以后修改struct,它可能会停止工作这是一个需要避免的解决方案。

 struct A
 {
   int a;
   char b;
   float c;
 };

struct A是一个聚合的内置类型,初始化为0。您可以通过两种方式初始化为A:

//Class method pass to function
int main() 
{
  A a = {};      // initialize single A to 0
  A b = A();     // same effort
  A c[10] = {};  // initialize array to 0
  return 0;
}

您可以使用构造函数初始化所有元素。因此,您不仅可以使用0,还可以使用其他值。

 struct A
 {
   int a;
   char b;
   float c;
   A(int _a=0,char _b=0,float _c=0.0) : a(_a), b(_b), c(_c) {}
 };
int main() 
{
  A a;
  // work with a
  return 0;
}

有几种方法:

  1. 使用初始值设定项mystruct x = { '', 0.0f, 0 };
  2. 使用mystruct x; memset(&x, 0, sizeof(x));
  3. 编写一个函数(或者,在C++中,一个构造函数),将每个值设置为零

一般来说,第一个是最明显的,但如果你有大量的structs,那么你可能会发现选项2或3中的任何一个都更合适。

注意:只有在只包含数据的数据结构上使用memset才是安全的。在C++中,structclass几乎相同,而具有成员函数、具有其他structclass成员或继承了其他classstruct成员的struct在上使用memset肯定是不安全的。当然,如果您从纯数据struct开始,这尤其危险,然后将功能添加到struct中,这"打破"了"唯一数据"的承诺。