【发布时间】:2018-08-13 17:55:02
【问题描述】:
我要做什么:
我正在编写一个不属于我的代码,我正在尝试重构它。我有一个结构类型的对象,我们称它为 MY_STRUCTURE,里面有一些参数。在该代码的旧版本中,他们使用 memset 在所有参数中使用 0 初始化结构。因此,我尝试将该 memset 更改为更 C++ 标准的方法,即 fill 或 fill_n。
另外,我应该提一下...没有数组,只是一个对象,所以我要做的就是用 0 初始化该对象。
运行良好的 memset 方法看起来像
this:memset(&MyScruct, 0, sizeof(MyScruct));
我尝试了什么:
我正在尝试像这样使用 fill 和 fill_n 之一:
std::fill(&MyScruct, &MyScruct+ sizeof(MyScruct), 0);
还有
std::fill_n(&MyScruct, sizeof(MyScruct), 0);
其中 MyScuct 是 MY_STRUCT MyScruct;
在这两种情况下,我都会遇到相同的错误:
错误 C2679:二进制“=”:未找到采用右手的运算符 'const int' 类型的操作数(或没有可接受的转换)
你知道这里为什么或发生了什么吗?
【问题讨论】:
-
fill和fill_n期望“填充”一个数组,就像对数组中的每个元素执行= 0;一样。我猜您实际上想将结构的每个字节设置为 0;如果是这样,那么fill和fill_n不是正确的工具 -
这会改善问题来解释你想要实现的目标
-
什么是
MY_STRUCT? -
发生这种情况是因为
fill正在尝试做与*&MyScruct = 0;等效的操作。 -
试试旧的好的 memset。
标签: c++ visual-studio-2010 c++11 std