我遇到了以下签名
double(&rotate_vec(double(&val)[4]))[4];
Run Code Online (Sandbox Code Playgroud)
在评论中,它"声称" 接受并返回四个元素的数组.我的第一反应是,这甚至看起来不是标准的c ++,但是这个编译:
double(&rotate_vec(double(&val)[4]))[4]
{
// ...
return val;
}
int main()
{
double ar[4] = { 1, 2, 3, 5 };
rotate_vec(ar);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Che*_*Alf 28
使用C++ 03,您可以做到最好的简化原始版本
double(&rotate_vec(double(&val)[4]))[4];
Run Code Online (Sandbox Code Playgroud)
是用来表示typedef
:
typedef double Four_vec[4];
Four_vec& rotate_vec( Four_vec& val );
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,您可以编写
auto rotate_vec( double (&val)[4] )
-> double (&)[4];
Run Code Online (Sandbox Code Playgroud)
虽然我用一个typedef
或C++ 11 using
来澄清.
关于
"我们不能从函数返回一个数组,只是指针,或者我们可以吗?"
你不能按值返回一个原始数组,但你可以返回一个指针或引用,或者你可以将它包装在一个结构中,如C++ 11 std::array
.
tem*_*boy 21
double ( &rotate_vec( double (&val)[4] ) )[4]
Run Code Online (Sandbox Code Playgroud)
一个名为的函数 rotate_vec
double ( &rotate_vec( double (&val)[4] ) )[4]
Run Code Online (Sandbox Code Playgroud)
......作为一个参数,一个四个双打数组的引用
double ( &rotate_vec( double (&val)[4] ) )[4]
Run Code Online (Sandbox Code Playgroud)
...并返回对四个双精度数组的引用.