4

我知道在 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++ 编程时,我应该使用哪个?

4

5 回答 5

5

MyStruct s3 = { sizeof(MyStruct) } ;不太可能做你认为的事情:

struct MyStruct
{
    int a;
    int b;
};

在本例中,MyStruct s3 = { sizeof(MyStruct) } ;将初始化x3.a为 8 和x3.b0。

于 2013-01-16T21:36:23.153 回答
3

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

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

前两个在 C++ 中是等价的,尽管第二个不是有效的 C,因为在 C 中,您必须在大括号内传递至少一个值。

于 2013-01-16T21:39:16.717 回答
0

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

于 2013-01-16T21:39:49.420 回答
0

第一个将结构元素初始化为零,并将其指针在 C 中指向 null。 http://www.ex-parrot.com/~chris/random/initialise.html并将结构初始化/重置为零/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
于 2013-01-16T22:04:36.503 回答
0
MyStruct s1 = { 0 };

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

MyStruct s3 = { sizeof(MyStruct) };

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

MyStruct s2 = { };

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

于 2013-01-16T21:49:00.900 回答