我有一个类对象数组,在类对象内部我有另一个数组,我需要将其初始化为全零。代码编译并运行,但我的输出显示 C 而不是 0。
从头文件:
class Cache {
private:
int byte[16];
public:
Cache();
int getBytes(int);
~Cache();
};
来自 cpp 文件
Cache::Cache()
{
byte[16]={0};
}
int Cache::getBytes(int j){
return byte[j];
}
从另一个 cpp 文件
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++) //visual check of initializes main memory
{
cout << cache[i].getBytes(j) << " ";
}
}
这是正确设置的吗?正如我所提到的,getBytes 按预期返回’C’而不是’0’。
原文由 Anik 发布,翻译遵循 CC BY-SA 4.0 许可协议
只需在构造函数初始化列表中使用 值初始化 即可。这是在 C++ 中执行此操作的惯用方式。
请注意,C++11 也允许这种语法:
如果您想知道 为什么 这样做有效,请参阅 C++ 11 标准(注意这也适用于 C++03):
值初始化 这个术语将我们带到:
这里的第三个选项触发每个元素的值初始化;第四种适用于我们到达这些元素中的每一个,因为它们 (a) 没有类类型,因此 (1) 和 (2) 消失了,并且 (b) 不是数组,因此 (3) 消失了。只剩下最后一个,并且您的元素是零初始化的。