我知道在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 ++编程时,我应该使用哪些?
答案 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.html和Initialize/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