c++ - 使用 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
正在处理结构类型,它必须找到相应的迭代器类?
解决方案
尝试用显式值填充它:foo = Foo { 0, 0 };
.
推荐阅读
- php - 无法从 postgres 数据库中转义斜杠
- dynamics-crm - USD - Windows 导航规则未从仪表板托管控件触发
- c# - 仅比较 DateTime 中的日期部分是否知道 C# 中的时区偏移量?
- python - 如何使用映射而不是if-else来提高python程序的速度?
- nuxt.js - 如何在 nuxt.config.js 中使用 CopyWebpackPlugin?
- java - 如何在Java中对键上的地图列表进行排序?
- abap - 如何在 SAP ABAP 类中知道当前浏览器的 URL
- mysql - Mysql-Workbench 表浏览器窗格丢失
- python-2.7 - 从其他目录调用 python 脚本函数
- java - 如何将mongodb视图与pageable和querydsl结合起来?