簡體   English   中英

基本 C++:如何初始化類的結構成員?

[英]Basic C++: How do I initialize a struct member of a class?

我找遍了所有地方,但還沒有找到答案。

我有一個帶有這些受保護成員的 C++ 類:

 struct tm  _creationDate;
 struct tm  _expirationDate;
 struct tm  _lockDate;

我想在實例化時初始化它們。 如果我把它放在構造函數中:

 _creationDate = {0};
 _expirationDate = {0};
 _lockDate = {0};

編譯器抱怨:“'{' 標記之前的預期主表達式”

我也找不到在構造函數頂部的成員初始值設定項列表中執行此操作的方法。 如何做到這一點? 謝謝!

跟進:感謝您的回復,伙計們。 你不能在聲明處做; 這是不允許的。 所以唯一的方法似乎是 memset 或單獨設置成員。 我最終編寫了一個實用函數來做到這一點。

您可以在這樣的聲明中執行它們

_creationDate = {0}; // set everything to 0's

或者像這樣

_creationDate = { StructElement1, StructElement2, ..., StructElement n);

_creationDate = { 0, false, 44.2);

或者在您的構造函數中,只需調用結構中的每個元素並進行初始化,例如...

_creationData.thing1 = 0;
_creationData.thing2 = false;
_creationData.thing3 = 66.3;

http://www.cprogramming.com/tutorial/initialization-lists-c++.html

class C {
    struct tm  _creationDate;
    struct tm  _expirationDate;
    struct tm  _lockDate;
    C() : _creationDate(), ... {}

我認為你只能在定義它時初始化這樣的結構:

struct tm a = {0}; // works ok
struct tm b;
b = {0};           // error

一種選擇是使用“默認”值

class a
{
    a() : t() {}
    struct tm t;
};

或構造函數中的memset

struct tm creationDate;
memset((void*)&creationDate, 0, sizeof(struct tm));

在 C++03 中唯一可能的方法:

class foo
{
    tm _creationDate;
    public:
    foo()
    {
        tm tmp_tm = {0};
        _creationDate = tmp_tm;
    }
};

請注意,這將初始化_creationDate與副本tmp_tm ,從而調用(最有可能自動生成)拷貝構造函數。 因此,對於大型結構,您應該堅持使用實用程序函數,因為這不需要復制整個結構。

順便說一句,以下划線開頭的名稱(在全局范圍內)是為標准庫實現保留的。 下划線開頭后跟大寫字母的名稱在任何地方都是保留的。 從技術_creationDate這里的名稱_creationDate很好,因為它不在全局范圍內,但我仍然建議避免使用前導下划線作為名稱。

暫無
暫無

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

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