在C++中使用memset作为结构体

问题描述 投票:0回答:1

嗯,我想要一个像

memset
但对于
struct
的函数,这样它就可以在某些或所有元素上使用,如下所示:

// create array of person data elements
struct {
  unsigned char name[25];
  unsigned char age;
  unsigned int numberPhone;
} persons [256];

// the 256 people have the same name
memset(person, { "Mohammed", 0, 0 } ,sizeof(persons[0]));

我可以使用

for loop
,但我更喜欢使用
memset
,因为在这种情况下它比
for loop
性能更高。

c++ c memory struct memset
1个回答
0
投票

如果所有 256 个对象都应使用相同的值进行初始化,只需默认它们即可:

struct {
    unsigned char name[25] = "Mohammed";
    unsigned char age = 0;
    unsigned int numberPhone = 0;
} persons [256];

不需要更多。

如果您想要默认值,请创建一个实例和

std::fill
数组:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <type_traits>

int main() {
    struct {
        unsigned char name[25];
        unsigned char age;
        unsigned int numberPhone;
    } persons[256];

    // an instance with the proper values:
    std::remove_reference_t<decltype(persons[0])> temp{
        .name = "Mohammed", .age = 0, .numberPhone = 0};

    // fill the array
    std::fill(std::begin(persons), std::end(persons), temp);
}

注意:

std::remove_reference_t<decltype(persons[0])>
是获取匿名类的 type 的一种麻烦方法。更愿意为您创建的类型命名。

© www.soinside.com 2019 - 2024. All rights reserved.