gpt4 book ai didi

C++ 函数的返回类型

转载 作者:搜寻专家 更新时间:2023-10-30 23:54:51 24 4
gpt4 key购买 nike

在这个例子中我想要返回 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;
}

optimizing compiler (例如 g++ -Wall -O2 -std=c++11 ....使用最近的 GCC )将完全像您假设的返回类型一样优化它(或像 FISOCPP's answer ,它很可能被编译成相同的目标代码)。

如果大小 (40) 可以在运行时变化,请使用 std::vector<int>作为类型并声明 std::vector> nums{40}; -然后你以后可以nums.resize(17);然后数据将保留在堆中(因此会有很小的性能损失)。

关于C++ 函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34774522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com