c++ 不可理解的函数签名 – 返回对N个对象的数组的引用

我遇到以下签名

double(&rotate_vec(double(&val)[4]))[4];

在评论中,“声明”接受和返回一个由四个元素组成的数组。我的第一反应是,这甚至不看标准c还this compiles

double(&rotate_vec(double(&val)[4]))[4]
{
    // ... 
    return val;
}

int main()
{
    double ar[4] = { 1, 2, 3, 5 };
    rotate_vec(ar);
    return 0;
}

>这是怎么回事?你会怎么读?
>我们can’t return an array from a function,只是指针,还是我们?

最佳答案
与C 03最好的,你可以做简化的原始

double(&rotate_vec(double(&val)[4]))[4];

是使用typedef,即:

typedef double Four_vec[4];
Four_vec& rotate_vec( Four_vec& val );

在C 11你可以写

auto rotate_vec( double (&val)[4] )
    -> double (&)[4];

虽然我会使用typedef或C 11使用来澄清。

关于

“We can’t return an array from a function, just pointers, or can we ?”

你不能通过值返回原始数组,但是你可以返回一个指针或引用,或者你可以将它包装在一个结构体,如C 11 std :: array。

转载注明原文:c++ 不可理解的函数签名 – 返回对N个对象的数组的引用 - 代码日志