声明数组时出错 >> int arr[];在 C++ 中(尽管在 Java 中有效)?

为什么我们不能int arr[];像 Java 那样在 C++ 中声明未指定大小的数组?当我尝试时,它给出了一个错误。

不使用就可以吗std::vector

附言。更新 8 月 3 日 11.24 pm IST 向所有我对此感到困惑的人道歉

int arr[]={1,2,3,4,5};

据我所知这是否意味着我们不能在 C++ 中声明一个数组而不像上面那样初始化它?, 如果我错了请纠正我..



肥皂起泡泡
浏览 194回答 4
4回答

森林海

“为什么我们不能声明未指定大小的数组”——因为 C++ 语言标准说你不能。“像 Java”——因为 C++ 不是 Java。不同的语言有不同的设计目标/标准以及不同的历史。如果您想要 C++ 中的动态数组,可以使用的工具是std::vector. 数组在 C++ 中始终是静态大小的(甚至更好std::array)。它需要知道预先分配多少空间(发生在编译时,而不是运行时)。这对性能很重要,因为您知道它以后不会进行动态重新分配。在某些情况下,它还可以让您了解对象的确切内存布局和大小,这可能很重要。您真的无法像您尝试的那样比较语言。每个都必须自己学习。你不能真的把东西从一个转移到另一个——即使它看起来很相似。

交互式爱情

在 C++ 中,我们必须在声明数组时指定数组的大小。这是 C++ 创建者的设计选择,可追溯到其 C 起源。另一方面,在 Java 中,我们只用 声明对数组对象的引用int arr[]。然后我们为数组分配内存,比如arr = new int[10]指定它的大小。在 Java 中,数组是对象,就像 String 或 ArrayList 一样。但在 C++ 中情况并非如此。

撒科打诨

Java 和 C++ 在这方面实际上非常相似,只是语法略有不同。爪哇:// declare a reference to an array of integersint[] arr;// allocate an array of 10 integers on the heap and store a reference in arrarr = new int[ 10 ];C++:// declare a pointer to an integer, set it to null to be safeint* arr = nullptr;// allocate an array of 10 integers on the heap and store a pointer to it in arrarr = new int[ 10 ];Java 通过在您使用完数组一段时间后对其进行垃圾回收,从而使事情变得更容易一些。你几乎可以在 C++ 中使用std::unique_ptr<int[]>or得到它std::shared_ptr<int[]>。或者std::vector<int>通常是更好的选择。您可能感到困惑的地方是 C++ 在堆栈上分配数组的能力。这些数组必须是在编译时声明的固定大小。Java没有这个特性,只有原始类型和引用分配在栈上。您还可以将这些固定大小的数组声明为对象成员,然后将其存储为对象的一部分。同样,Java 没有此功能,对象只能包含对数组的引用。

aluckdog

简而言之,它需要知道要分配多少内存。std::vector 会在幕后为您重新分配内存,如果您要实现自己的 std::vector,您可以先声明一个特定大小的数组,并在需要调整任何内存时使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java