首页 > 解决方案 > 使用 std::fill 用 0 填充结构的正确方法?

问题描述

是否std::fill也为填充结构设计?例如我有一个结构:

struct Foo {
  int i = 1;
  float f = 0.2;
};

Foo出于某种原因,我想填写0

int main() {
  Foo foo;
//  memset(&foo, 0, sizeof(Foo));
  std::fill(&foo, &foo + 1, 0);
  std::cout << foo.i << std::endl;
  std::cout << foo.f << std::endl;
}

但编译失败:

no match for ‘operator=’ (operand types are ‘Foo’ and ‘const int’)

我是否std::fill以错误的方式使用?

PS我发现如果我改为

std::fill((uint8_t*)&foo, (uint8_t*)&foo + sizeof(foo), 0);

代码可以工作,这是否意味着如果std::fill正在处理结构类型,它必须找到相应的迭代器类?

标签: c++

解决方案


尝试用显式值填充它:foo = Foo { 0, 0 };.


推荐阅读