我刚开始接触 C++,我想养成一些好习惯。如果我刚刚使用 new
运算符分配了一个类型为 int
的数组,我怎样才能将它们全部初始化为 0 而无需自己循环遍历它们?我应该只使用 memset
吗?有没有“C++”的方式来做到这一点?
原文由 dreamlax 发布,翻译遵循 CC BY-SA 4.0 许可协议
我刚开始接触 C++,我想养成一些好习惯。如果我刚刚使用 new
运算符分配了一个类型为 int
的数组,我怎样才能将它们全部初始化为 0 而无需自己循环遍历它们?我应该只使用 memset
吗?有没有“C++”的方式来做到这一点?
原文由 dreamlax 发布,翻译遵循 CC BY-SA 4.0 许可协议
初始化普通动态数组的可能方法。根据您的要求选择一个。
int* x = new int[5]; // gv gv gv gv gv (gv - garbage value)
int* x = new int[5](); // 0 0 0 0 0
int* x = new int[5]{}; // 0 0 0 0 0 (Modern C++)
int* x = new int[5]{1,2,3}; // 1 2 3 0 0 (Modern C++)
原文由 SridharKritha 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
这是 C++ 一个令人惊讶的鲜为人知的特性(这一点可以从没有人给出这个答案的事实中得到证明),但它实际上具有用于对数组进行值初始化的特殊语法:
请注意,您 必须 使用空括号——例如,您不能使用
(0)
或其他任何东西(这就是为什么这只对值初始化有用)。这是 ISO C++03 5.3.4[expr.new]/15 明确允许的,它说:
并且不限制允许这样做的类型,而
(expression-list)
形式受到同一部分中的进一步规则的明确限制,因此它不允许数组类型。