[英]Default Struct Initialization in C++
假設我有一個看起來像這樣的結構(一個POD):
struct Foo
{
int i;
double d;
};
以下兩行之間有什么區別:
Foo* f1 = new Foo;
Foo* f2 = new Foo();
第一個是未初始化的值; 第二個將它們初始化為零。 這只是POD類型的情況,它沒有構造函數。
我什么都沒想。 允許Foo()
,即使它沒有任何意義......我已經嘗試將struct
更改為class
並在生成的exe上嘗試了diff,它們也是相同的,這意味着沒有方法的類就像一個結構從實際和“有效”的角度來看。
但是 :如果你只使用其中一個替代方法,保留struct
或class
,那么new Foo
和new Foo()
會給出不同的可執行文件! (至少使用g ++)即
struct Foo { int i; double d; } int main() { Foo *f1 = new Foo; delete f1; }
編譯成不同的somehing
struct Foo { int i; double d; } int main() { Foo *f1 = new Foo(); delete f1; }
同樣的事情發生在class
而不是struct
。 要知道差異在哪里,我們應該看看生成的代碼......並且要知道它是否是g ++ idiosincracy,我應該嘗試另一個編譯器,但我只有gcc,現在沒時間分析g ++的asm輸出。 ..
無論從“功能”(實際)的角度來看,它都是一回事。
加
最后,對Q / A站點上的一些常見人類問題進行了解或進行更深入的調查總是更好... ... g ++在()和no()情況下生成的代碼的唯一區別,
movl $0, (%eax) fldz fstpl 4(%eax)
這是一個片段,初始化為0 / 0.0的int和結構的兩倍...所以Seymour更了解它(但我可以在不知道我是否先看過asm的情況下發現它!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.