在构造函数中对数组数据成员进行零初始化

艾尼克

我有一个类对象数组,在类对象内部,我还有另一个数组需要初始化为全零。代码可以编译并运行,但是我的输出显示的是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。

juanchopanza

只需在构造函数初始化列表中使用值初始化即可这是C ++中惯用的方式。

Cache::Cache() : byte()
{ 
}

请注意,C ++ 11也允许以下语法:

Cache::Cache() : byte{}
{ 
}

如果您想知道为什么这样做有效,请参阅C ++ 11标准(请注意,这也适用于C ++ 03):

C ++ 11§8.5,第10页

一个其初始值设定项是一个空括号集合(即())的对象,应进行值初始化

价值初始化这个术语使我们能够:

C ++ 11§8.5,p7

值初始化T类型的对象的意思是:

  • 如果T是具有用户提供的构造函数(12.1)的(可能是cv限定的)类类型9,则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化格式不正确);

  • 如果T是没有用户提供的构造函数的(可能是cv限定的)非工会类类型,则该对象将初始化为零,并且,如果T的隐式声明的默认构造函数非平凡,则将调用该构造函数。

  • 如果T是数组类型,则每个元素都进行值初始化;

  • 否则,将对象初始化为零。

第三个选项触发每个元素的值初始化;一旦我们到达这些元素中的每一个,第四种方法就适用了,因为它们是(a)没有类类型,因此(1)和(2)不存在,(b)不是数组,因此(3)不存在。仅剩下最后一个,并且您的元素被零初始化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

默认构造函数是否对成员数组变量进行零初始化?

来自分类Dev

使用值初始化数组对数据进行零初始化

来自分类Dev

为什么这个模板化函数不能对数组进行零初始化编译?

来自分类Dev

为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

来自分类Dev

PHP-在类的构造函数中初始化对象的实例,在静态成员中进行访问

来自分类Dev

构造函数中初始化嵌套成员的语法?

来自分类Dev

用错误初始化构造函数中的成员

来自分类Dev

非原始成员初始化中的复制构造函数

来自分类Dev

从构造函数中的std :: istream初始化const类数据成员

来自分类Dev

初始化列表中的零初始化数组成员

来自分类Dev

在类中声明数组并在构造函数中对其进行初始化

来自分类Dev

在C ++中的构造函数中初始化数组

来自分类Dev

在类声明或构造函数初始化器列表中初始化简单成员

来自分类Dev

在Java中:在构造函数中使用foreach循环初始化多维数组数据字段

来自分类Dev

在构造函数中初始化数组类变量

来自分类Dev

在构造函数中初始化const数组

来自分类Dev

C ++-在构造函数中初始化指针数组

来自分类Dev

C ++-在构造函数中初始化指针数组

来自分类Dev

如何在默认构造函数中初始化数组?

来自分类Dev

在构造函数中初始化二维数组

来自分类Dev

在 sfml 的构造函数中初始化向量数组

来自分类Dev

在C ++中初始化对数组

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

在类构造函数C ++中将零初始化多维数组

来自分类Dev

在构造函数C ++中用零初始化2D数组

来自分类Dev

如何从构造函数参数初始化模板成员数组?

来自分类Dev

如何从构造函数参数初始化模板成员数组?

来自分类Dev

删除类的复制构造函数时,初始化类的数组成员

Related 相关文章

  1. 1

    默认构造函数是否对成员数组变量进行零初始化?

  2. 2

    使用值初始化数组对数据进行零初始化

  3. 3

    为什么这个模板化函数不能对数组进行零初始化编译?

  4. 4

    为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

  5. 5

    PHP-在类的构造函数中初始化对象的实例,在静态成员中进行访问

  6. 6

    构造函数中初始化嵌套成员的语法?

  7. 7

    用错误初始化构造函数中的成员

  8. 8

    非原始成员初始化中的复制构造函数

  9. 9

    从构造函数中的std :: istream初始化const类数据成员

  10. 10

    初始化列表中的零初始化数组成员

  11. 11

    在类中声明数组并在构造函数中对其进行初始化

  12. 12

    在C ++中的构造函数中初始化数组

  13. 13

    在类声明或构造函数初始化器列表中初始化简单成员

  14. 14

    在Java中:在构造函数中使用foreach循环初始化多维数组数据字段

  15. 15

    在构造函数中初始化数组类变量

  16. 16

    在构造函数中初始化const数组

  17. 17

    C ++-在构造函数中初始化指针数组

  18. 18

    C ++-在构造函数中初始化指针数组

  19. 19

    如何在默认构造函数中初始化数组?

  20. 20

    在构造函数中初始化二维数组

  21. 21

    在 sfml 的构造函数中初始化向量数组

  22. 22

    在C ++中初始化对数组

  23. 23

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  24. 24

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  25. 25

    在类构造函数C ++中将零初始化多维数组

  26. 26

    在构造函数C ++中用零初始化2D数组

  27. 27

    如何从构造函数参数初始化模板成员数组?

  28. 28

    如何从构造函数参数初始化模板成员数组?

  29. 29

    删除类的复制构造函数时,初始化类的数组成员

热门标签

归档