[英]Regarding struct initialization in c++
我有这样的结构
typedef struct sample
{
double x,
double y,
double z
}s1;
s1 s;
s 变量中的内容是否会初始化?
x,y,z 的值是多少?
谢谢
如果s
在 function scope 中定义, x
、 y
和z
将不会被初始化。 它们将包含一些未指定的值。 在文件 scope 中,数据成员将被初始化为其默认值。
在 C++ 但是你可以有一个构造函数初始化列表来初始化数据成员
例如
struct ABC
{
int x;
int y;
ABC(): x(1),y(2){}
};
ABC s; // x and y initialized to 1 and 2 respectively
在 C++ 中,您还可以使用默认初始化和值初始化来初始化数据成员。
在您提供的代码中,这些字段将未初始化。 您可以添加一个构造函数(如果需要/可以),或者如果您需要 POD 特性(您的代码的某些部分取决于其中一些属性)并且您不能添加构造函数,您仍然可以对结构进行值初始化(即设置每个成员为0)在使用的地方:
struct sample // typedef not required
{
double x,
double y,
double z
};
sample s = sample(); // will set all members to 0.0
现在,如果你想用一些特定的值初始化不同的成员,因为它是一个聚合,你可以使用聚合初始化:
sample s = { 1.0, 3.0 };
这会将x
设置为1.0
,将y
设置为3.0
。 由于z
没有值,编译器会将其设置为0.0
。 请注意,这意味着sample s = {};
相当于sample s = sample();
如果是 C++,可以做构造函数。
struct s1
{
s1( const double x = 0.0, const double y = 0.0, const double z = 0.0 )
: x(x), y(y), z(z)
{
};
double x;
double y;
double z;
};
s1 s;
如果变量是static
或在namespace
/ 文件 scope 中,则会初始化诸如double
和int
之类的内置类型,否则 - 出于效率原因 - 它们不会被初始化,除非构造函数表明这是有用的。
注意:此答案针对“s1 s;” 你描述的情况。 定义变量时可以提供显式初始化,但这是另一种情况。
要添加构造函数:
struct X
{
X() : x_(0), y_(0), z_(0) { }
double x, y, z;
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.