4 回答

TA貢獻2011條經驗 獲得超2個贊
“為什么我們不能聲明未指定大小的數組”——因為 C++ 語言標準說你不能?!跋?Java”——因為 C++ 不是 Java。不同的語言有不同的設計目標/標準以及不同的歷史。如果您想要 C++ 中的動態數組,可以使用的工具是std::vector
. 數組在 C++ 中始終是靜態大小的(甚至更好std::array
)。它需要知道預先分配多少空間(發生在編譯時,而不是運行時)。這對性能很重要,因為您知道它以后不會進行動態重新分配。在某些情況下,它還可以讓您了解對象的確切內存布局和大小,這可能很重要。
您真的無法像您嘗試的那樣比較語言。每個都必須自己學習。你不能真的把東西從一個轉移到另一個——即使它看起來很相似。

TA貢獻1712條經驗 獲得超3個贊
在 C++ 中,我們必須在聲明數組時指定數組的大小。這是 C++ 創建者的設計選擇,可追溯到其 C 起源。
另一方面,在 Java 中,我們只用 聲明對數組對象的引用int arr[]
。然后我們為數組分配內存,比如arr = new int[10]
指定它的大小。
在 Java 中,數組是對象,就像 String 或 ArrayList 一樣。但在 C++ 中情況并非如此。

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[]>?;蛘遱td::vector<int>通常是更好的選擇。
您可能感到困惑的地方是 C++ 在堆棧上分配數組的能力。這些數組必須是在編譯時聲明的固定大小。Java沒有這個特性,只有原始類型和引用分配在棧上。
您還可以將這些固定大小的數組聲明為對象成員,然后將其存儲為對象的一部分。同樣,Java 沒有此功能,對象只能包含對數組的引用。

TA貢獻1847條經驗 獲得超7個贊
簡而言之,它需要知道要分配多少內存。
std::vector 會在幕后為您重新分配內存,如果您要實現自己的 std::vector,您可以先聲明一個特定大小的數組,并在需要調整任何內存時使用。
添加回答
舉報