不同struct初始化方法之间的区别

时间:2013-01-16 21:31:13

标签: c++

我知道在C ++中有很多不同的方法来完成同样的事情;但是,我想知道这些初始化结构的方法之间的区别。我也想知道什么是C ++的做事方式,因为我知道其中一些方法来自C。

struct MyStruct
{
    int x, y, z;
};

MyStruct s1 = { 0 };  //I think this is from C but not really sure.
MyStruct s2 = { }; //I think this might be from C++
MyStruct s3 = { sizeof(MyStruct) } ; //Not sure where this comes from but I like it

用C ++编程时,我应该使用哪些?

5 个答案:

答案 0 :(得分:5)

MyStruct s3 = { sizeof(MyStruct) } ;不太可能按照您的想法行事:

struct MyStruct
{
    int a;
    int b;
};

在此示例中,MyStruct s3 = { sizeof(MyStruct) } ;会将x3.a初始化为8,将x3.b初始化为0。

答案 1 :(得分:3)

(假设POD类型,而不是新的统一初始化语法)

这三个是C ++中的有效初始化,假设struct具有可以从整数初始化的第一个元素。第三个选项将结构的第一个成员设置为结构的大小,其余的字段保留为零初始化。

前两个在C ++中是等效的,虽然第二个在C中是无效的,因为在C中你必须在大括号内传递至少一个值。

答案 2 :(得分:0)

[假设C ++]对于s1,您正在将MyStruct中的第一个变量初始化为零。对于s3,您将其初始化为结构的大小。在这两种情况下,编译器都会将您提供的值转换为适合MyStruct中第一个列出的变量的类型。

答案 3 :(得分:0)

MyStruct s1 = { 0 };

使用这个初始化之王,您将初始化结构的第一个元素。如果值与元素类型不对应,编译器(例如gcc或g ++)将尝试进行一些隐式转换。所有其他元素将设置为默认值。

MyStruct s3 = { sizeof(MyStruct) };

完全相同,第一个元素值将是以字节为单位的结构大小。

MyStruct s2 = { };

最后,这个初始化仅在C ++中有效,C中的等价物是MyStruct s2;。它将所有值初始化为默认值。

答案 4 :(得分:0)

第一个将结构元素初始化为零,其指针在C中为null。 http://www.ex-parrot.com/~chris/random/initialise.htmlInitialize/reset struct to zero/null

但是在C ++中没有。在C ++中,第一个元素被初始化。

MyStruct s1 = { 0 };  //I think this is from C but not really sure.

第二个在C ++中初始化为零,如1)为C

做的
MyStruct s2 = { };

第三个将第一个元素值设置为C和C ++中MyStruct的sizeof

MyStruct s3 = { sizeof(MyStruct) } ; //Not sure where this comes from but I like it