在这个例子中我想要返回int nums[40]
我该怎么办?
<RETURNTYPE> test()
{
int nums[40];
for (int i=0; i < 40; i++)
{
nums[i] = i + 1;
}
return nums;
}
Run Code Online (Sandbox Code Playgroud)
你不能这样做.由于多种原因(包括历史记录和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;
}
Run Code Online (Sandbox Code Playgroud)
一个优化的编译器(如g++ -Wall -O2 -std=c++11....使用最新GCC)将优化是完全一样的假想返回类型(或类似FISOCPP的答案,这很可能编译到同一个对象的代码).
如果大小(40)在运行时可能会有所不同,请使用std::vector<int>作为类型并声明std::vector> nums{40}; - 然后您可以nums.resize(17);将数据保留在堆中(因此会有很小的性能损失).
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |