1
struct OBJECT
{
unsigned int Var1;
std::string Str1;
...
bool YesNo;
};

OBJECT Obj[ 327 ];

我对如何将 Obj 归零感到困惑。它有几种不同类型的元素。我是否必须将其所有成员设置为 0?比如…… Obj[0].Str = ""; ?那么问题来了,正确的做法是什么?

我的尝试:

::memset( &Obj, 0, sizeof( Obj ) );

我不确定我是否正确地做...

哦,有没有更快的方法将数组归零?

4

4 回答 4

10

不要这样做,因为你的结构中有重要的成员(例如std::string)。如果您的所有成员都只是简单的数据类型,例如 、 或指针,您可以int这样做chardouble

这种结构的正确方法是定义一个构造函数,它正确地初始化所有成员

struct OBJECT {
    OBJECT() : Var1(0), YesNo(false), ... {}

    unsigned int Var1;
    std::string Str1;
    ...
    bool YesNo;
};
于 2013-03-14T10:59:25.347 回答
3

“正确”的方法是为您的结构添加一个构造函数方法,该方法初始化任何没有自己的构造函数的成员变量,例如:

OBJECT_STRUCT()
: Var1(0)
, YesNo(false)
{
}

在该示例中,您会注意到Str1未初始化;这是因为std::string有自己的构造函数来初始化它。

于 2013-03-14T10:58:21.570 回答
3

提供自定义默认构造函数或使用编译器定义的默认构造函数:

std::fill(std::begin(Obj), std::end(Obj), OBJECT());

请注意,fill仅当您使用默认构造函数时,方法填充才有效。

于 2013-03-14T10:59:02.430 回答
1

您应该将您的声明更改为

struct OBJECT
{
    unsigned int Var1;
    std::string Str1;
    ...
    bool YesNo;

   OBJECT()
   : Var1()
   , Str1()
   , ...
   , YesNo(false)
   {
       // Do Nothing
   }
};

数组 - 您应该使用std::arrayor std::vector- 将初始化对象。

于 2013-03-14T10:59:37.680 回答