簡體   English   中英

c ++從函數返回類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM