struct / class成员的显式初始化

时间:2010-06-09 06:40:33

标签: c++ c struct initialization

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教程中看到了这种初始化形式

4 个答案:

答案 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)