我遇到了以下签名
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;
}
答案 0 :(得分:28)
使用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 using
来澄清。
关于
“我们不能从函数返回一个数组,只是指针,或者我们可以吗?”
您无法按值返回原始数组,但您可以返回指针或引用,也可以将其包装在结构中,如C ++ 11 std::array
。
答案 1 :(得分:21)
double ( &rotate_vec( double (&val)[4] ) )[4]
名为rotate_vec
double ( &rotate_vec( double (&val)[4] ) )[4]
...作为参数,对四个双精度数组的引用
double ( &rotate_vec( double (&val)[4] ) )[4]
...并返回对四个双精度数组的引用。