簡體   English   中英

當我的編譯器不符合標准時,如何將數組成員歸零

[英]How to zero array members when my compiler isn't standard conform

我的編譯器(C ++ Builder6)在語法上允許數組成員初始化(至少為零),但實際上並沒有真正做到這一點。 因此,下面給出的示例中的斷言取決於上下文。

#include <assert.h>

struct TT {
    char b[8];
    TT(): b() {}
};

void testIt() {
    TT t;
    assert(t.b[7] == 0);
}

目前無法更改編譯器。 我的問題是:在未來的可移植性和標准一致性方面,“修復”這個缺陷的最佳方法是什么?


編輯:事實證明,我的第一個例子 太短了 它忽略了這一點,即數組的填充級別非常重要,它必須非常靠近數組存儲,即:在同一個類中。

即使原始問題仍然存在 ,我的實際問題模式通常是這樣的:

struct TT2 {
    int size;
    char data[8];
    // ... some more elements
    TT2(): size(0), data() {}
    // ... some more methods
};

我想你可以用這個:

TT() { std::fill(b, b + 8, char()); }

這樣您就可以解決您的問題,同時便攜性和標准一致性沒有任何問題!

您可以使用fill_n,如: C / C ++初始化具有一個默認值的普通數組

如果沒有fill_n可用,您可以始終使用memset,如:

TT() {memset(b, 0, sizeof b);}

我想附加以前的帖子,如果你使用字符數組作為字符串,那么在構造函數中寫入就足夠了

TT(){b [0] ='\\ 0'; }

暫無
暫無

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

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