繁体   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