【发布时间】:2012-12-25 15:02:18
【问题描述】:
假设我们有这样的结构:
struct A
{
int x;
int y;
};
有什么区别
A a = {0};
和
A a;
memset(&a,0,sizeof(A));
【问题讨论】:
-
那么,
A a = { 0 };是否也保证将填充设置为 0?因为如果不是,那也有区别。 -
@H2CO3 在 C2011 中是这样,在 C99 中不保证。 (但它是 C,所以无论如何它必须是
struct A a = {0};。) -
@H2CO3 我们是在谈论未定义行为访问的内存区域吗?
-
@JanDvorak 是的,我们是。但从技术上讲,它仍然是一个区别,我们是否想访问它。
-
@H2CO3 如果要考虑可能影响 UD 结果的任何事情,那么没有什么是无关紧要的,尤其是当它到达编译器时。您无法对 UD 进行推理 - 它不必有意义。