尾随 return 类型数组
Trailing return type array
auto function(int i) -> int(*)[10]{
}
任何人都可以帮助我如何 return 使用尾随 return 类型指向 10 个整数数组的指针吗?任何例子都会有所帮助。
如果您不关心您的 return 值是否可取消引用(并且您没有指定),以下将 "return a pointer to an array of 10 integers":
auto function(int i) -> int(*)[10]
{
return nullptr;
}
首先,您需要决定整数的存储位置、它们的存储方式 "shared",以及调用者或被调用者是否对其生命周期负责。
选项包括...
1) return 指向新动态分配内存的指针:
auto function(int i) -> int(*)[10] {
int* p = new int[10];
p[0] = 1;
p[1] = 39;
...
p[9] = -3;
return (int(*)[10])p;
}
// BTW it's usually cleaner (avoiding the ugly cast above) to handle
// arrays via a pointer (but you do lose the compile-time knowledge of
// array extent, which can be used e.g. by templates)
int* function(int i) {
int* p = ...new and assign as above...
return p;
}
// either way - the caller has to do the same thing...
void caller()
{
int (*p)[10] = function();
std::cout << p[0] + p[9] << '\n';
delete[] p;
}
请注意,99% 的时间 return 使用 std::vector<int>
或 std::array<int, 10>
是一个更好的主意,而在剩余的 99% 的时间里 return a std::unique_ptr<int[]>
调用者可以将其移动到他们自己的变量,这将 delete[]
数据因超出范围而被销毁,或者 - 对于成员变量 - 包含对象的销毁。
2) return 指向 function()
-local static
数组的指针(每次调用 function
时都会被覆盖,这样旧的 returned 指针将看到更新后的值,多线程代码中可能存在竞争条件):
auto function(int i) -> int(*)[10]{
static int a[10] { 1, 39, ..., -3 };
return &a;
}
调用方同理调用,但一定不能调用delete[]
.
#include <iostream>
const size_t sz = 10;
auto func(int i) -> int(*)[sz] /// returns a pointer to an array of ten ints
{
static int arr[sz];
for (size_t i = 0; i != sz; ++i)
arr[i] = i;
return &arr;
}
int main()
{
int i = 2;
int (*p)[sz] = func(i); /// points to an array of ten ints which funct returns which is arr array
for (size_t ind = 0; ind != sz; ++ind) /// displays the values
std::cout << (*p)[ind] << std::endl;
return 0;
}
auto function (int i) -> int(*)[sz]
- 这意味着函数名 funct 的参数为 int 接受
一个 int 参数和 return 一个指向 10 个整数数组的指针,这意味着
我们指出了十个整数数组中的每个整数元素。尾随 return 类型用于易于阅读
到return一个指向十个整型数组的指针
int i = 2;
int (*p)[sz] = funct(i);
- 这意味着 (*p)[sz] 将指向一个 func 函数的 10 个整数数组
returns 是 arr 数组并使用循环
显示值
auto function(int i) -> int(*)[10]{
}
任何人都可以帮助我如何 return 使用尾随 return 类型指向 10 个整数数组的指针吗?任何例子都会有所帮助。
如果您不关心您的 return 值是否可取消引用(并且您没有指定),以下将 "return a pointer to an array of 10 integers":
auto function(int i) -> int(*)[10]
{
return nullptr;
}
首先,您需要决定整数的存储位置、它们的存储方式 "shared",以及调用者或被调用者是否对其生命周期负责。
选项包括...
1) return 指向新动态分配内存的指针:
auto function(int i) -> int(*)[10] {
int* p = new int[10];
p[0] = 1;
p[1] = 39;
...
p[9] = -3;
return (int(*)[10])p;
}
// BTW it's usually cleaner (avoiding the ugly cast above) to handle
// arrays via a pointer (but you do lose the compile-time knowledge of
// array extent, which can be used e.g. by templates)
int* function(int i) {
int* p = ...new and assign as above...
return p;
}
// either way - the caller has to do the same thing...
void caller()
{
int (*p)[10] = function();
std::cout << p[0] + p[9] << '\n';
delete[] p;
}
请注意,99% 的时间 return 使用 std::vector<int>
或 std::array<int, 10>
是一个更好的主意,而在剩余的 99% 的时间里 return a std::unique_ptr<int[]>
调用者可以将其移动到他们自己的变量,这将 delete[]
数据因超出范围而被销毁,或者 - 对于成员变量 - 包含对象的销毁。
2) return 指向 function()
-local static
数组的指针(每次调用 function
时都会被覆盖,这样旧的 returned 指针将看到更新后的值,多线程代码中可能存在竞争条件):
auto function(int i) -> int(*)[10]{
static int a[10] { 1, 39, ..., -3 };
return &a;
}
调用方同理调用,但一定不能调用delete[]
.
#include <iostream>
const size_t sz = 10;
auto func(int i) -> int(*)[sz] /// returns a pointer to an array of ten ints
{
static int arr[sz];
for (size_t i = 0; i != sz; ++i)
arr[i] = i;
return &arr;
}
int main()
{
int i = 2;
int (*p)[sz] = func(i); /// points to an array of ten ints which funct returns which is arr array
for (size_t ind = 0; ind != sz; ++ind) /// displays the values
std::cout << (*p)[ind] << std::endl;
return 0;
}
auto function (int i) -> int(*)[sz]
- 这意味着函数名 funct 的参数为 int 接受
一个 int 参数和 return 一个指向 10 个整数数组的指针,这意味着 我们指出了十个整数数组中的每个整数元素。尾随 return 类型用于易于阅读
到return一个指向十个整型数组的指针
int i = 2; int (*p)[sz] = funct(i);
- 这意味着 (*p)[sz] 将指向一个 func 函数的 10 个整数数组 returns 是 arr 数组并使用循环 显示值