簡體   English   中英

C ++中的默認結構初始化

[英]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,它們也是相同的,這意味着沒有方法的類就像一個結構從實際和“有效”的角度來看。

但是 :如果你只使用其中一個替代方法,保留structclass ,那么new Foonew 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的情況下發現它!)

根據我發布的鏈接。

在C ++中,類和結構之間的唯一區別是類成員默認是私有的,而struct-members默認為public。 所以結構可以有構造函數,語法和類相同。

結構構造器信息

暫無
暫無

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

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