C++ 从函数返回类型

c++ return type from function

本文关键字:返回类型 函数 C++      更新时间:2023-10-16

在这个例子中,我希望返回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 的答案,它可能会被编译成相同的目标代码)一样进行优化。

如果大小 (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 *。