假设在 C++里有一个数据结构:
struct Data {
int a;
int b;
};
我们可以有三种方法置零,最简单直接的:
Data data;
data.a = data.b = 0;
也可以用聚合列表初始化:
Data data = {};
或者用memset
填充:
Data data;
memset(&data, 0, sizeof(data));
其中第二种写法最简单,不用引入头文件,且可以在一行里写完。但第二行可能有严重的跨程序的兼容性问题。问题出现在因为对齐问题,数据结构有填充空间时,填充空间会有随机非零内容。比如下面数据结构:
struct Data {
int a;
char b;
int c;
};
因此推荐无论任何时候,都使用memset
进行 0 初始化。从效率上看,也是 memset 更快。三种方式的汇编码可参考:https://godbolt.org/z/TMohvx 。
Q. E. D.