Som*_*one 14 c++ typedef c++11
我正在阅读C++入门书,完全不理解一行:
using int_array = int[4];
typedef int int_array[4]; // This line
for (int_array *p = ia; p != ia + 3; ++p) {
for (int *q = *p; q != *p + 4; ++q)
cout << *q << ' '; cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
好的typedef
是一样的using
.这是否意味着int[4][4]
现在int
以及如何理解这一点?什么类型int_array
的for
循环?
谢谢
use*_*301 11
两者都做了完全相同的事情:定义int_array
为4的数组的别名ints
using
有一个很好的A = B符号通常更容易理解.
using alias = type;
Run Code Online (Sandbox Code Playgroud)
typedef
的符号并不是很落后.简单来说typedef
typedef type alias;
Run Code Online (Sandbox Code Playgroud)
但更复杂的typedef
s往往会蔓延.我怀疑语法是根据人们如何定义一个变量来建模的,但我找不到我打包旧K&R C编程书的副本的地方,目前看不出来.
int int_array[4];
Run Code Online (Sandbox Code Playgroud)
将定义int_array
为4 int
秒的数组.拍打typedef
前面
typedef int int_array[4];
Run Code Online (Sandbox Code Playgroud)
创建int_array
一个类型别名而不是变量.
另一个例子,
int * intp;
Run Code Online (Sandbox Code Playgroud)
定义intp
为指向的指针int
.
typedef int * intp;
Run Code Online (Sandbox Code Playgroud)
定义intp
为指向的类型指针的别名int
.
由于typedef
ed别名的名称可能隐藏在定义的中间某处,因此使用更复杂的数据类型会变得很丑陋.一个typedef
ed函数指针,例如:
typedef void (*funcp)(param_t param1, param_t param2, ...);
Run Code Online (Sandbox Code Playgroud)
与使用
using funcp = void (*)(param_t param1, param_t param2, ...);
Run Code Online (Sandbox Code Playgroud)
如果你想要2D阵列,你可以
using int_array2D = int[4][4];
Run Code Online (Sandbox Code Playgroud)
或者你可以定义一个int_array数组
using int_array2D = int_array[4];
Run Code Online (Sandbox Code Playgroud)
当然,这意味着你可以
using int_array3D = int_array2D[4];
Run Code Online (Sandbox Code Playgroud)
并继续前进,直到奶牛回家或你已经挤满了医生大脑融化的那么多维度.
线条
using int_array = int[4];
Run Code Online (Sandbox Code Playgroud)
和
typedef int int_array[4];
Run Code Online (Sandbox Code Playgroud)
做同样的事。请参阅使用和typedef 的参考。您可以忽略其中一个,行为是相同的。有两个不同的声明并不是错误,因为它们并不冲突(它们做完全相同的事情)。
第一种方法(使用using
关键字)是在 C++11 中引入的,在我看来更容易阅读,所以我更喜欢它而不是 typedef 版本。