我有一个名为quint8 block[16]
的数组,我:
block[16] = { 0 }
bool fill(const quint8 *data)
在这个fill
函数中,我想看看数组是否完全填充,或者它是否包含未填充的空元素。
以这种方式执行检查是否正确? if(!data[i])
?我在这个论坛上看过类似的Q& A,但他们都使用\0
或NULL
而且我听说这不是一个很好的风格,这让我很困惑。
答案 0 :(得分:4)
整数类型在C ++中没有“null”概念。
两个可能的想法是:
1)使用某个特定的整数值来表示“未设置”。如果0对您的数据有效,那么显然它不能用于此。也许其他一些值可行,例如类型的最大值(在这种情况下看起来像是0xff)。但是,如果所有可能的值对您的数据都有效,那么这个想法将不起作用。
2)使用其他一些数据来跟踪已设置的值。一种方法是bool数组,每个bool对应一个数据元素。另一种方法是简单计算已经为一个值设置了多少元素(显然这只有在按顺序填充数据而没有任何间隙的情况下才有效)。
答案 1 :(得分:2)
如果您的问题是,您是否可以区分已已分配零值的数组元素与未分配给但尚未分配的元素初始化值为零,然后答案是:你不能。
您必须找到其他方法来完成您想要完成的任务。很难提供具体的建议,因为我无法看到你正在尝试做的更广泛的事情。
答案 2 :(得分:0)
这取决于类型quint8
是否具有bool转换运算符或某些其他转换操作,例如是整数类型。
如果quint8
是某种整数类型(对于整数类型,某些typedef),则没有问题。这个定义
quint8 block[16] = { 0 };
将数组的所有元素初始化为零。
考虑到一般情况下可以使用标头std::find
中声明的算法std::find_if
,std::any_of
或<algorithm>
完成任务