不可理解的函数签名-返回对N个对象数组的引用
Incomprehensible function signature - Return reference to an array of N objects
我遇到了以下签名
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;
}
- 这个c++怎么样?你会怎么读
- 我们不能从函数返回数组,只能返回指针,还是可以
使用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];
尽管我会使用CCD_ 2或C++11using
来澄清。
关于
“我们不能从函数返回数组,只能返回指针,还是可以”
不能按值返回原始数组,但可以返回指针或引用,也可以将其封装在结构中,如C++11std::array
。
double ( &rotate_vec( double (&val)[4] ) )[4]
一个名为rotate_vec
的函数
double ( &rotate_vec( double (&val)[4] ) )[4]
以引用四个双数组为自变量
double ( &rotate_vec( double (&val)[4] ) )[4]
并返回对四个双打的数组的引用。
相关文章:
- 将对象数组的引用传递给函数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 类对象数组的问题会导致崩溃
- Arduino C++在构造函数中用参数声明对象数组
- 使用对象数组对 SFML 进行动画处理
- C++ 对象数组堆栈溢出
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何初始化对象数组?
- C++创建对象数组
- 在对象数组中搜索字符串并返回相应值的函数
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 使用 C++ 创建对象数组
- 对象数组打印空白字符串
- 重载运算符 [] 用于从对象数组中给出特定索引
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组