3
我發現這個片的C++代碼,使用memset的()來初始化的對象:memset()在構造函數中初始化對象?
struct Message
{
Message()
{
memset(this, 0, sizeof(Message));
}
unsigned int a, b, c;
};
由於這是一種POD結構,這種代碼應該罰款。
有在用memset,而不是如構造任何優勢:
Message() : a(0), b(0), c(0) {}
考慮如果您的對象具有虛擬表格指針會發生什麼。好的編譯器很可能會在第二種情況下確定你有POD和memset它們或類似的東西。但如果稍後決定建立一個層次結構,那麼你就會搞砸了。 – Spo1ler 2015-03-02 11:04:53
如果添加新字段,它將自動設置爲0,無需額外的工作。這是我看到的唯一優勢。 – Ivan 2015-03-02 11:06:26
至少在memset之前/之後插入'static_assert'。這告訴人類讀者以及編譯器,你假設消息是POD;如果不是,編譯器將會失敗,讀者會知道爲什麼你認爲memset是可以的。 – leemes 2015-03-02 11:11:09