不可理解的函数签名 - 返回对N个对象的数组的引用 [英] Incomprehensible function signature - Return reference to an array of N objects

查看:107
本文介绍了不可理解的函数签名 - 返回对N个对象的数组的引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了以下签名

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

在声明中,它声明接受并返回一个包含四个元素的数组<强>。我的第一反应是,这甚至不看标准的c ++,但这个编译

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

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




  1. 你会怎么读?

  2. 我们无法从函数返回数组,只是指针,或我们可以吗 ?

  1. How is this c++ ? How would you read it ?
  2. We can't return an array from a function, just pointers, or can we ?


推荐答案

使用C ++ 03,您可以做最简单的

With C++03 the best you can do to simplify the original

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

是使用 typedef

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

在C ++ 11中,您可以写

In C++11 you can write

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

虽然我会使用 typedef

关于


“我们不能从函数返回数组,只是指针,或者我们可以?

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

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

you can't return a raw array by value, but you can return a pointer or reference, or you can wrap it in a struct, like C++11 std::array.

这篇关于不可理解的函数签名 - 返回对N个对象的数组的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆