相对于标准对结构数组进行零初始化(重置)的有效方法

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

假设我有一个 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++ stdatomic memset auto-vectorization
1个回答
0
投票

自 C++11 以来,在 C++ 中它非常简单:

array = {};

如果行为等效,编译器可以自由地将其编译为等效的

memset
。不可能出错。您不必担心该类型是否可以简单复制并且
memset
允许(但事实并非如此)。

即使在异国情调的平台上,例如空指针没有全零位表示,在这种情况下,即使在等效的 C 代码中,

memset
也总是错误的。

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