亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否默認將C ++結構的成員初始化為0?

是否默認將C ++結構的成員初始化為0?

C++
弒天下 2019-09-19 09:05:44
我有這個struct:struct Snapshot{     double x;      int y;};我希望x并且y為0.默認情況下它們是0還是我必須這樣做:Snapshot s = {0,0};將結構歸零的其他方法是什么?
查看完整描述

3 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

如果不初始化結構,它們不為null。


Snapshot s; // receives no initialization

Snapshot s = {}; // value initializes all members

第二個將使所有成員為零,第一個將它們保留為未指定的值。請注意,它是遞歸的:


struct Parent { Snapshot s; };

Parent p; // receives no initialization

Parent p = {}; // value initializes all members

第二個將p.s.{x,y}為零。如果在結構中有構造函數,則不能使用這些聚合初始化列表。如果是這種情況,則必須為這些構造函數添加適當的初始化


struct Snapshot {

    int x;

    double y;

    Snapshot():x(0),y(0) { }

    // other ctors / functions...

};

將x和y初始化為0.請注意,您可以使用x(), y()初始化它們而忽略它們的類型:那就是值初始化,并且通常會產生一個正確的初始值(0表示int,0.0表示double,調用用戶定義的默認構造函數具有用戶聲明的構造函數的類型,...)。這非常重要,特別是如果您的結構是模板。


查看完整回答
反對 回復 2019-09-19
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

不,默認情況下它們不是0。確保所有值或默認為0的最簡單方法是定義構造函數

Snapshot() : x(0), y(0) {}

這可確??煺盏乃惺褂枚季哂谐跏蓟?。


查看完整回答
反對 回復 2019-09-19
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

一般來說,沒有。但是,在函數/中聲明為文件范圍或靜態的結構將被初始化為0(就像這些范圍的所有其他變量一樣):


int x; // 0

int y = 42; // 42

struct { int a, b; } foo; // 0, 0


void foo() {

  struct { int a, b; } bar; // undefined

  static struct { int c, d; } quux; // 0, 0

}


查看完整回答
反對 回復 2019-09-19
  • 3 回答
  • 0 關注
  • 582 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號