[英]c++ return type from function
在這個例子中我想要返回int nums[40]
我該怎么做?
<RETURNTYPE> test()
{
int nums[40];
for (int i=0; i < 40; i++)
{
nums[i] = i + 1;
}
return nums;
}
你不能這樣做。 由於多種原因(包括歷史記錄和C兼容性,以及在幾個重要情況下將數組衰減到指針的規則),您無法返回原始數組; 但是你可以返回包含該數組的struct
(或class
....)。
你在C ++ 11中可以做的是返回一個std::array<int,40>
; 它表現得像你的東西,但它是一個合適的類(你想象的所有常用操作,以及迭代器的東西)。 所以你的代碼變成:
std::array<int,40> test(void) {
std::array<int,40> nums;
for (int i=0; i < 40; i++) {
nums[i] = i + 1;
}
return nums;
}
優化編譯器 (例如g++ -Wall -O2 -std=c++11
....使用最近的GCC )將優化與您的假設返回類型完全相同(或者像FISOCPP的答案 ,它可能被編譯成相同的目標代碼)。
如果size(40)在運行時可能會有所不同,請使用std::vector<int>
作為類型並聲明std::vector> nums{40};
- 然后你可以nums.resize(17);
然后數據將保留在堆中(因此性能損失很小)。
實現這一目標的唯一方法是將數組封裝到結構(或聯合 - 這是不相關的)。
typedef struct { int ra[20]; } rvtyp;
rvtyp test()
{
int nums[40];
for (int i=0; i < 40; i++)
{
nums[i] = i + 1;
}
return *(rvtyp*)&nums;
}
然后,您可以通過'test()。ra'訪問您返回的值。
您需要動態分配內存(它現在在堆棧中)。 返回類型將是int *然后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.