尾随返回类型数组

时间:2015-06-24 00:01:20

标签: c++ arrays types return trailing

auto function(int i) -> int(*)[10]{

}

任何人都可以帮我如何使用尾随返回类型返回指向10个整数数组的指针?任何例子都会有所帮助。

3 个答案:

答案 0 :(得分:2)

如果您不关心返回值是否可解除引用(并且您没有指定),则以下将“返回指向10个整数数组的指针”:

auto function(int i) -> int(*)[10]
{
    return nullptr;
}

答案 1 :(得分:2)

首先,您需要确定整数的存储位置,它们将如何“共享”,以及调用者或被调用者是否对其生命周期负责。

选项包括......

1)返回指向新动态分配的内存的指针:

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%的时间返回std::vector<int>std::array<int, 10>是一个更好的主意,剩下99%的剩余时间最好返回std::unique_ptr<int[]>调用者可以移动到他们自己的变量,这将使delete[]数据在超出范围时被销毁,或者 - 对于成员变量 - 将导致包含对象的销毁。

2)返回指向function() - 本地static数组的指针(每次调用function时都会被覆盖,这样旧的返回指针会看到更新后的值可能是多线程代码中的竞争条件):

auto function(int i) -> int(*)[10]{
    static int a[10] { 1, 39, ..., -3 };
    return &a;
}

来电者以同样的方式拨打电话,但 不得 拨打delete[]

答案 2 :(得分:0)

#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;
}
  

自动功能(int i) - &gt; int(*)[sz]

  • 这意味着函数名称funct具有接受
    的int参数 一个int参数并返回一个指向10个int数组的指针,这意味着 我们将每个int元素都指向了十个int的数组。尾随返回类型用于轻松阅读

返回指向十个int

数组的指针
  

int i = 2;     int(* p)[sz] = funct(i);

  • 表示(* p)[sz]将指向一个func函数的10个整数数组 返回arr数组并使用循环
  • 显示值