我有一个结构,需要初始化它的对象std::fill.
typedef struct _test
{
char name[32];
char key[4];
int count;
}test;
Run Code Online (Sandbox Code Playgroud)
截至目前,我正在使用memset.我需要改成它std::fill.我在下面尝试过,但std::fill抛出了结构对象的编译器错误.
test t;
char a[5];
std::fill(a, a + 5, 0);
std::fill(t, sizeof(t), 0);
Run Code Online (Sandbox Code Playgroud)
注意:我不想用这种方式初始化. char a[5] = {0};
你不需要std::fill(或者std::memset你应该在这里阅读更多内容).只是值初始化结构:
test t{};
Run Code Online (Sandbox Code Playgroud)
这将反过来初始化所有字段.除此之外,std::fill接受范围,而t, sizeof(t)不是范围.
最后一点,typedef struct _test是一个不必要的C-ism.C++中的结构标记也是一个新的类型名称.所以这样做会污染带有_test标识符的封闭命名空间.如果您在机会中需要C兼容性,那么可以采用的方法就是这样
typedef struct test
{
char name[32];
char key[4];
int count;
} test;
Run Code Online (Sandbox Code Playgroud)
尽管结构声明和typedef声明相同的类型名称,但这种typedef在C++中显式有效.它还允许C和C++代码将类型引用为test或者struct test.