3 回答

TA貢獻1906條經(jīng)驗 獲得超3個贊
C中的數(shù)組(以及C ++中的向后兼容性)具有與其余類型不同的特殊語義。特別是,對于其余類型,C僅具有按值傳遞語義,對于數(shù)組,按值傳遞語法的效果以一種奇怪的方式模擬了按引用傳遞:
在函數(shù)簽名中,類型為T的N個元素的類型數(shù)組的參數(shù)轉(zhuǎn)換為指向T的指針。在函數(shù)調(diào)用中,將數(shù)組作為參數(shù)傳遞給函數(shù)將使數(shù)組衰減為指向第一個元素的指針,并且該指針將被復制到函數(shù)中。
由于對數(shù)組進行了特殊處理-它們不能按值傳遞-因此也不能按值返回它們。在C中,您可以返回一個指針,在C ++中,您也可以返回一個引用,但是數(shù)組本身不能在堆棧中分配。
如果考慮到這一點,這與您在問題中使用的語言沒有什么不同,因為該數(shù)組是動態(tài)分配的,并且您僅返回指向它的指針/引用。
另一方面,C ++語言為該特定問題提供了不同的解決方案,例如std::vector
在當前標準中使用(內(nèi)容是動態(tài)分配的)或std::array
在即將到來的標準中使用(內(nèi)容可以在堆棧中分配的,但是這樣做可能會增加成本) ,因為在編譯器無法刪除副本的情況下,必須復制每個元素)。實際上,您可以通過使用現(xiàn)有的庫(如)與當前標準使用相同類型的方法boost::array
。
添加回答
舉報