使用std :: fill

时间:2019-01-03 09:59:02

标签: 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);

注意:我不想使用这种方式进行初始化。 char a[5] = {0};

1 个答案:

答案 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 ++代码将类型都称为teststruct test