C++ 使用std::fill初始化结构对象

C++ 使用std::fill初始化结构对象,c++,std,C++,Std,我下面有一个结构,需要使用std::fill初始化它的对象 typedef struct _test { char name[32]; char key[4]; int count; }test; 现在,我正在使用memset。我需要将其更改为std::fill。我在下面尝试过,但是std::fill为结构对象抛出编译器错误 test t; char a[5]; std::fill(a, a + 5, 0); std::fill(t, sizeof(t), 0);

我下面有一个结构,需要使用
std::fill
初始化它的对象

typedef struct _test
{
    char name[32];
    char key[4];
    int count;

}test;
现在,我正在使用
memset
。我需要将其更改为
std::fill
。我在下面尝试过,但是
std::fill
为结构对象抛出编译器错误

test t;
char a[5];
std::fill(a, a + 5, 0);
std::fill(t, sizeof(t), 0);

注意:我不想用这种方式初始化<代码>字符a[5]={0}

您不需要
std::fill
(或者
std::memset
,您应该阅读更多内容)。只需初始化结构的值:

test t{};
这将反过来初始化所有字段。除此之外,
std::fill
接受一个范围,而
t,sizeof(t)
不是一个范围

最后,请注意,
typedef struct\u test
是一个不必要的C-ism。C++中的结构标记也是一种新的类型名称。因此,这会用
\u test
标识符污染封闭的名称空间。如果你需要C的兼容性,那么最好的办法就是

typedef struct test
{
    char name[32];
    char key[4];
    int count;

} test;

这种类型的Type在C++中是显式有效的,尽管结构声明和<代码> TyPulfF<代码>声明相同的类型名称。它也允许C和C++代码引用类型为“<代码>测试< /COD>或<代码>结构测试< /代码> .< /P>结构,在C库之一中定义。我的应用程序正在使用该结构。我无法控制C库。我将在代码的不同部分重用同一对象,我需要将值重置为0。在这种情况下,我必须使用memset。所以我问了这个问题想知道,有没有办法用std替换memset::fill@Arun事实上,你想使用MeMSET或填充不会改变你在C++中不需要的。你想要零,我提供了一个答案,它会毫不费力地给出零就可以了。谢谢你提供的信息。我尝试了数组的值初始化。它的工作方式与结构相同。有没有类似的方法来重置数组,或者我应该使用std::fill或memset?@Arun-数组仍然需要
std::fill
。尽管如果使用
std::array
,它也将具有全值语义。