假设我有一个 struct
Foo
s。 t.
struct alignas(64) Foo {
int value;
struct Foo* other;
};
然后,如果我有一个由
Foo array[2048];
组成的数组 Foo
,如果我想在不违反标准的情况下将此数组重置为零初始化 Foo
,有一种方法可以在 C 中实现: memset
.
但是,当使用 C++ 时:调用
memset
安全吗?
我已经初始化了数组,但里面有一些脏值,我想将其重置为零状态。
如何有效地将
array
重置为零初始化Foo
的方法是什么,如果Foo
现在里面有一个atomic
:
struct alignas(64) Foo {
std::atomic<int> value;
struct Foo* other;
};
自 C++11 以来,在 C++ 中它非常简单:
array = {};
如果行为等效,编译器可以自由地将其编译为等效的
memset
。不可能出错。您不必担心该类型是否可以简单复制并且 memset
允许(但事实并非如此)。
即使在异国情调的平台上,例如空指针没有全零位表示,在这种情况下,即使在等效的 C 代码中,
memset
也总是错误的。