这些数组类型有何不同
How are these array types different?
因此,通常当您为函数参数键入数组时,您会这样声明它们:
f ( const float offset [ 3 ] )
但我一直在做一个项目,他们这样宣布:
f ( const float ( &offset ) [ 3 ] )
这种变化到底意味着什么?据我所知,我们已经有效地传递了一个指针。强迫它引用这样的内容是什么?
f ( const float offset [ 3 ] )
在这种情况下,3是没有意义的。offset
甚至不是一个数组,它是一个指针(const float*
)。因此,这个函数将接受任何浮点指针,并且通过衰减将接受任何大小的浮点数组。
float x2[2];
float x3[3];
float x4[4];
float* fp;
f(x2); // compiles
f(x3); // compiles
f(x4); // compiles
f(fp); // compiles
此外,在功能内部:
sizeof(offset) == sizeof(float*)
然而,
f ( const float ( &offset ) [ 3 ] )
在这种情况下,offset
是对3个常量浮点数组的引用。只有一个包含3个浮点值的数组将被接受为参数。
f(x2); // does not compile
f(x3); // compiles
f(x4); // does not compile
f(fp); // does not compile
在功能内部:
sizeof(offset) == sizeof(float) * 3
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- CRTP 模式 但是在数据结构中存储非同构类型
- 私有结构(在类中定义)不能用作属于同一类的函数的返回类型吗
- C++ 管理多个同质数据类型
- 在同一行读取具有多个类型的文件
- C++对同一类类型的引用公开私有成员
- 在同一类中向前声明类型