通常,数据结构的有效初始化是将所有成员设置为零.即使使用C++进行编程,也可能需要与外部API进行交互.
以下是否有任何实际区别:
some_struct s;
memset(&s, 0, sizeof(s));
Run Code Online (Sandbox Code Playgroud)
简单地说
some_struct s = { 0 };
Run Code Online (Sandbox Code Playgroud)
人们发现自己都使用这两种方法,选择哪种方法更适合给定的应用程序?(希望据了解,这只适用于POD结构;如果该结构中存在C++ std :: string,则会遇到各种各样的破坏.)
对于我自己来说,作为一个不使用memset的C++程序员,我从不确定函数签名,所以我发现第二个例子更容易使用,除了更少打字,更紧凑,甚至更多很明显,因为它在声明中说"这个对象被初始化为零"而不是等待下一行代码并且看到"哦,这个对象初始化为零".
在C++中创建类和结构时,我倾向于使用初始化列表; 我很好奇人们对上面两个"C风格"初始化的想法,而不是与C++中可用的内容进行比较,因为我怀疑我们很多人都与C库接口,即使我们自己主要用C++编写代码.
编辑: Neil Butterworth 在后续提出这个问题,我认为这是这个问题的一个有趣的推论.