4 回答

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

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

TA貢獻1934條經(jīng)驗 獲得超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 通過在您使用完數(shù)組一段時間后對其進行垃圾回收,從而使事情變得更容易一些。你幾乎可以在 C++ 中使用std::unique_ptr<int[]>or得到它std::shared_ptr<int[]>?;蛘遱td::vector<int>通常是更好的選擇。
您可能感到困惑的地方是 C++ 在堆棧上分配數(shù)組的能力。這些數(shù)組必須是在編譯時聲明的固定大小。Java沒有這個特性,只有原始類型和引用分配在棧上。
您還可以將這些固定大小的數(shù)組聲明為對象成員,然后將其存儲為對象的一部分。同樣,Java 沒有此功能,對象只能包含對數(shù)組的引用。

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