C++ 如何将结构中的所有内容设置为0?

C++ 如何将结构中的所有内容设置为0?,c++,database,struct,C++,Database,Struct,我有一个结构,其中有3种不同类型的值(char、float、int)…我需要在程序开始时将所有值都设置为0。我该怎么做 struct A { int a; char b; float c; }; struct A是初始化为0的聚合内置类型。您可以通过两种方式初始化为: //Class method pass to function int main() { A a = {}; // initialize single A to 0 A b = A()

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

 struct A
 {
   int a;
   char b;
   float c;
 };
struct A
是初始化为
0
的聚合内置类型。您可以通过两种方式初始化为:

//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;
}
struct A
是初始化为
0
的聚合内置类型。您可以通过两种方式初始化为:

//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;
}

有几种方法:

  • 使用初始值设定项
    mystruct x={'\0',0.0f,0}
  • 使用mystruct x;memset(&x,0,sizeof(x))
  • 编写一个函数(或者,在C++中,构造函数),将每个值设置为零。<李> 一般来说,第一个是最明显的,但是如果您有大量的结构,那么您可能会发现选项2或3中的任何一个更合适


    注意:仅在仅包含数据的数据结构上使用
    memset
    是安全的。在C++中,一个<代码>结构> <代码>和<代码>类< /代码>几乎是相同的,并且具有成员函数的<代码>结构> <代码>,有其他<代码>结构> <代码>或<代码>类< /代码>成员,或者继承自另一个代码>类< /代码>或<代码>结构> /代码>,绝对不安全地使用<代码> MyStuts<代码>。当然,如果您从简单的数据结构开始,然后在结构中添加“破坏”了“唯一数据”承诺的功能,那么这尤其危险

    有几种方法:

  • 使用初始值设定项
    mystruct x={'\0',0.0f,0}
  • 使用mystruct x;memset(&x,0,sizeof(x))
  • 编写一个函数(或者,在C++中,构造函数),将每个值设置为零。<李> 一般来说,第一个是最明显的,但是如果您有大量的结构,那么您可能会发现选项2或3中的任何一个更合适

    注意:仅在仅包含数据的数据结构上使用
    memset
    是安全的。在C++中,一个<代码>结构> <代码>和<代码>类< /代码>几乎是相同的,并且具有成员函数的<代码>结构> <代码>,有其他<代码>结构> <代码>或<代码>类< /代码>成员,或者继承自另一个代码>类< /代码>或<代码>结构> /代码>,绝对不安全地使用<代码> MyStuts<代码>。当然,如果您从简单的数据结构开始,然后在结构中添加“破坏”了“唯一数据”承诺的功能,那么这尤其危险

    您可以使用a来初始化所有元素。因此,您不仅可以使用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;
    }
    
    您可以使用a来初始化所有元素。因此,您不仅可以使用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;
    }
    

    通常有两种方法:

    A a = A();
    

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

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

    通常有两种方法:

    A a = A();
    

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

    关于使用
    memset
    的建议:
    memset
    仅适用于 保证适用于积分类型。我无法想象它不是 为
    浮动
    工作,但从形式上讲,这并不保证。及 当然,如果以后修改
    结构
    ,它可能会停止

    工作这是一个需要避免的解决方案。

    @Ivaylo聚合初始化从那时起就存在了。@billz奇怪的是,这使一些数据为0,并保持其余数据不变(预设到内存位置)@MokammelHossainSanju“剩下的数据原样”是什么意思?@billz结构被放入一个数组中,这意味着从您的示例A[]来看……数组是10个字符长的,当我打印所有内容时,有些值是0,但其他值在其上转储了内存数据。@MokammelHossainSanju与array不同,查看我的更新answer@Ivaylo聚合初始化从那时起就存在了。@billz奇怪的是,这使一些数据为0,并保持其余数据的原样(预设到内存位置)@MokammelHossainSanju“其余数据原样”是什么意思?@billz结构被放入一个数组中,从您的示例中可以看出是A[]..数组长度为10个字符,当我打印所有内容时,有些值为0,但其他值已转储内存数据。@MokammelHossainSanju with array,情况不同,请参阅我的更新答案数组中使用的结构如果有任何变化,您可以编辑您的问题以添加该信息。如果您添加一行代码来显示它在数组中的使用方式,这将是一件好事。该结构将在数组中使用,如果这会改变任何内容,您可以编辑您的问题以添加该信息。如果您添加一行代码来显示它在数组中的使用方式,那就太好了。对于数组,您必须使用第二种形式。但是如果您使用
    std::vector
    ,它将在每个元素上执行与第一个相同的操作(除非您为它提供了不同的复制方式)。Thanx很多,我一直在尝试,但我想我在声明全局自定义变量时需要这样做。对于数组,您必须使用第二种形式。但是如果您使用
    std::vector
    ,它将在每个元素上执行与第一个相同的操作(除非您为它提供了不同的复制内容)。Thanx很多,我一直在尝试,但我想我在声明全局自定义变量时需要这样做。我强烈建议您避免使用方法2。而只要您的
    结构保持在pla状态,它就是安全的