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 的答案,它可能会被编译成相同的目标代码)一样进行优化。
如果大小 (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 *。
相关文章:
- 如何获取std::result_of函数的返回类型
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 函数作为模板参数,是否对返回类型强制约束
- C++中函数的向量返回类型引发错误
- 检查函数返回类型是否与STL容器类型值相同
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 在 c++ 中将函数返回类型指定为模板参数
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 模板返回类型函数如何在C++中工作
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 在引用或指针返回类型函数上输入
- 在后面的返回类型函数语法中,auto关键字背后是否有意图
- 我可以在c++中重写字符串返回类型函数吗?