簡體   English   中英

關於 c++ 中的結構初始化

[英]Regarding struct initialization in c++

我有這樣的結構

 typedef struct sample
 {
       double x,
       double y,
       double z
 }s1;
 s1 s;

s 變量中的內容是否會初始化?

x,y,z 的值是多少?

謝謝

如果s在 function scope 中定義, xyz將不會被初始化。 它們將包含一些未指定的值。 在文件 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 中,則會初始化諸如doubleint之類的內置類型,否則 - 出於效率原因 - 它們不會被初始化,除非構造函數表明這是有用的。

注意:此答案針對“s1 s;” 你描述的情況。 定義變量時可以提供顯式初始化,但這是另一種情況。

要添加構造函數:

struct X
{
    X() : x_(0), y_(0), z_(0) { }
    double x, y, z;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM