struct some_struct{
int a;
};
some_struct n = {};
在此之后n.a将为0;
我知道这种大括号形式的初始化是从C继承的,并且支持与C程序兼容,但这只能用C ++编译,而不能用C编译器编译。我正在使用Visual C ++ 2005。
在C中这种初始化
struct some_struct n = {0};
是正确的,并且会对结构的所有成员进行零初始化。
空对括号是初始化标准吗?我首先在msdn。
的WinAPI教程中看到了这种初始化形式答案 0 :(得分:9)
初始化的空括号形式在C ++中是标准的(语法明确允许)。如果您有兴趣,请参阅C Static Array Initialization - how verbose do I need to be?了解更多详情。
我认为它已添加到C ++中,因为在所有情况下将0值用于默认初始化值可能不合适。
答案 1 :(得分:8)
它是C ++中的标准,它不在C中。
语法是引入C ++的,因为有些对象不能用0初始化,并且没有通用的方法来执行数组的值初始化。
答案 2 :(得分:0)
{0}显然是C99。
以符合C89和C ++标准的方式初始化的另一种方法是“技巧”:
struct some_struct { int a; };
static some_struct zstruct;
some_struct n = zstruct;
这使用静态变量使用0'ed内存预先初始化的事实,与堆栈或堆上的声明相反。
答案 3 :(得分:-1)