[英]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.