为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

肥皂起泡泡 2023-05-10 16:59:14
为什么我们不能int arr[];像 Java 那样在 C++ 中声明未指定大小的数组?当我尝试时,它给出了一个错误。不使用就可以吗std::vector?附言。更新 8 月 3 日 11.24 pm IST 向所有我对此感到困惑的人道歉int arr[]={1,2,3,4,5};据我所知这是否意味着我们不能在 C++ 中声明一个数组而不像上面那样初始化它?, 如果我错了请纠正我..
查看完整描述

4 回答

?
森林海

TA贡献2011条经验 获得超2个赞

“为什么我们不能声明未指定大小的数组”——因为 C++ 语言标准说你不能。“像 Java”——因为 C++ 不是 Java。不同的语言有不同的设计目标/标准以及不同的历史。如果您想要 C++ 中的动态数组,可以使用的工具是std::vector. 数组在 C++ 中始终是静态大小的(甚至更好std::array)。它需要知道预先分配多少空间(发生在编译时,而不是运行时)。这对性能很重要,因为您知道它以后不会进行动态重新分配。在某些情况下,它还可以让您了解对象的确切内存布局和大小,这可能很重要。

您真的无法像您尝试的那样比较语言。每个都必须自己学习。你不能真的把东西从一个转移到另一个——即使它看起来很相似。


查看完整回答
反对 回复 2023-05-10
?
交互式爱情

TA贡献1712条经验 获得超3个赞

在 C++ 中,我们必须在声明数组时指定数组的大小。这是 C++ 创建者的设计选择,可追溯到其 C 起源。

另一方面,在 Java 中,我们只用 声明对数组对象的引用int arr[]。然后我们为数组分配内存,比如arr = new int[10]指定它的大小。

在 Java 中,数组是对象,就像 String 或 ArrayList 一样。但在 C++ 中情况并非如此。


查看完整回答
反对 回复 2023-05-10
?
撒科打诨

TA贡献1934条经验 获得超2个赞

Java 和 C++ 在这方面实际上非常相似,只是语法略有不同。


爪哇:


// declare a reference to an array of integers

int[] arr;

// allocate an array of 10 integers on the heap and store a reference in arr

arr = new int[ 10 ];

C++:


// declare a pointer to an integer, set it to null to be safe

int* arr = nullptr;

// allocate an array of 10 integers on the heap and store a pointer to it in arr

arr = new int[ 10 ];

Java 通过在您使用完数组一段时间后对其进行垃圾回收,从而使事情变得更容易一些。你几乎可以在 C++ 中使用std::unique_ptr<int[]>or得到它std::shared_ptr<int[]>。或者std::vector<int>通常是更好的选择。


您可能感到困惑的地方是 C++ 在堆栈上分配数组的能力。这些数组必须是在编译时声明的固定大小。Java没有这个特性,只有原始类型和引用分配在栈上。


您还可以将这些固定大小的数组声明为对象成员,然后将其存储为对象的一部分。同样,Java 没有此功能,对象只能包含对数组的引用。


查看完整回答
反对 回复 2023-05-10
?
aluckdog

TA贡献1847条经验 获得超7个赞

简而言之,它需要知道要分配多少内存。

std::vector 会在幕后为您重新分配内存,如果您要实现自己的 std::vector,您可以先声明一个特定大小的数组,并在需要调整任何内存时使用。


查看完整回答
反对 回复 2023-05-10
  • 4 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信