如何使用typedef来别名c++数组
How to use typedef to alias C++ arrays?
当对数组使用typedef时,它被用作
typedef int Color[3];
这对我来说是非常违反直觉的。
为什么不选择typedef int[3] Color[3]?
typedef
看起来完全像一个普通的变量声明,而这恰好是C中的数组声明的样子(并继承到c++中):
int foo[3]; // Array of three int
typedef int FooT[3]; // typedef for array of three int.
Typedef就像变量定义一样工作,遵循所有相同的规则(已经建立和已知的规则),唯一的区别是它表示的不是变量名,而是类型。
我想说,与其实现一些新的方案(这将不得不处理所有微妙的事情,例如,指针指向数组与指针数组),不如使用现有的方案是明智的选择。
恐怕这就是语言的定义方式。如果有帮助的话,typedef
语法看起来就像声明语法:
int Color[3];
将生成一个包含三个整数的数组,因此:
typedef int Color[3];
Typedefs一个由三个整数组成的数组
语法匹配的一个方便的优点是,您可以使用cdecl(1)
之类的工具为您生成或解释它们:
cdecl> explain int Color[3]
declare Color as array 3 of int
cdecl> declare Color as array 3 of int
int Color[3]
我建议使用
typedef std::array<int,3> RGB_Type;
与其他c++ std容器的类型定义一致。
在c++ 11中,你可以创建一个接近你想要的语法:
template<typename T>
using type_def = T;
type_def<int[3]> colors;
乍一看,我不建议这样做:另一方面,一些非常复杂的类型声明可以通过这种机制大大简化。去除复杂类型中的"占位符" typedef
,其目的只是为了使最终类型看起来更具可读性。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '