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,調用用戶定義的默認構造函數具有用戶聲明的構造函數的類型,...)。這非常重要,特別是如果您的結構是模板。
TA貢獻1752條經驗 獲得超4個贊
不,默認情況下它們不是0。確保所有值或默認為0的最簡單方法是定義構造函數
Snapshot() : x(0), y(0) {}這可確??煺盏乃惺褂枚季哂谐跏蓟?。
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
}
- 3 回答
- 0 關注
- 582 瀏覽
添加回答
舉報
