C++ 使用动态数组初始化为其索引指定了什么默认值?

C++ 使用动态数组初始化为其索引指定了什么默认值?,c++,arrays,pointers,integer,C++,Arrays,Pointers,Integer,我的程序要求数组中的初始值为0 我必须从文件中读取一个int,然后创建该长度的数组 但是,为了确保它们被初始化为0,我正在执行以下操作 但由于编译时不存在从文件读取的no\u,因此会遇到错误 如何在不使用任何循环的情况下实现所需的行为 还有,如果我使用 int* ptr; ptr=new int[no_read_from_file]; 初始化索引是否默认为0 初始化索引是否默认为0 否。这是默认的初始化。默认初始化整数的值不确定 您要做的是值初始化。值初始化整数的值为0。例如: ptr=new

我的程序要求数组中的初始值为
0

我必须从文件中读取一个int,然后创建该长度的数组

但是,为了确保它们被初始化为
0
,我正在执行以下操作

但由于编译时不存在从文件读取的
no\u,因此会遇到错误

如何在不使用任何循环的情况下实现所需的行为

还有,如果我使用

int* ptr;
ptr=new int[no_read_from_file];
初始化索引是否默认为
0

初始化索引是否默认为0

否。这是默认的初始化。默认初始化整数的值不确定

您要做的是值初始化。值初始化整数的值为0。例如:

ptr=new int[no_read_from_file]();
更好的解决方案:通过使用RAII容器避免内存泄漏和错误处理导致的其他错误:

std::vector<int> arr(no_read_from_file);
std::vector arr(不从文件读取);
初始化索引是否默认为0

否。这是默认的初始化。默认初始化整数的值不确定

您要做的是值初始化。值初始化整数的值为0。例如:

ptr=new int[no_read_from_file]();
更好的解决方案:通过使用RAII容器避免内存泄漏和错误处理导致的其他错误:

std::vector<int> arr(no_read_from_file);
std::vector arr(不从文件读取);
您可以使用

#包括
int*ptr;
ptr=new int[不从文件读取];
std::fill(ptr,ptr+no_read_from_file,INIT_VALUE);
INIT\u值
可以是
0
或您想要的任何其他值。

您可以使用

#包括
int*ptr;
ptr=new int[不从文件读取];
std::fill(ptr,ptr+no_read_from_file,INIT_VALUE);

INIT_值
可以是
0
或您想要的任何其他值。

ptr=new int[no_read_from_file]之后放置
()
是什么确实如此?@Ahmn21这是值初始化的语法。它确实将数组元素的初始化更改为值初始化,而不是默认初始化。@Ahmn21关于各种类型的初始化,它们的含义以及如何使用它们。@eerorika我必须在
()
之间添加任何
int
才能进行所需的初始化吗?我的意思是,如果我写
(1)
。。所有索引是否都有
value=1
?@Ahmn21否。初始化数组时,不能在括号之间放置任何内容。在
ptr=new int[No_read_from_file]之后放置
()
意味着什么确实如此?@Ahmn21这是值初始化的语法。它确实将数组元素的初始化更改为值初始化,而不是默认初始化。@Ahmn21关于各种类型的初始化,它们的含义以及如何使用它们。@eerorika我必须在
()
之间添加任何
int
才能进行所需的初始化吗?我的意思是,如果我写
(1)
。。所有索引是否都有
value=1
?@Ahmn21否。初始化数组时,不能在括号之间插入任何内容。
std::vector<int> arr(no_read_from_file);
#include <algorithm>

int* ptr;
ptr=new int[no_read_from_file];
std::fill(ptr, ptr + no_read_from_file, INIT_VALUE);