我下面有一个结构,需要使用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);
注意:我不想使用这种方式进行初始化。 char a[5] = {0};
答案 0 :(得分:9)
您不需要std::fill
(或std::memset
,您应该在上面阅读更多here)。只需值即可初始化结构:
test t{};
这将使所有字段初始化为零。除此之外,std::fill
接受范围,而t, sizeof(t)
不是范围。
最后一点,typedef struct _test
是不必要的C主义。 C ++中的structure标记也是一个新的类型名称。因此,这样做是用_test
标识符污染封闭的名称空间。如果您需要偶尔使用C兼容性,则方法是这样
typedef struct test
{
char name[32];
char key[4];
int count;
} test;
尽管struct声明和typedef
声明了相同的类型名称,但这种typedef在C ++中明确有效。它还允许C和C ++代码将类型都称为test
或struct test
。