TL;DR
Both are doing the exact same thing: Defining int_array
as an alias of an array of 4 int
s
Making Sense of the Syntax
using
has a nice A = B notation that is generally much easier to understand.
using alias = type;
typedef
's notation is not quite backward. For a simple typedef
typedef type alias;
but more complicated typedef
s tend to sprawl. I suspect the syntax was modeled after how one would define a variable, but I can't find where I packed my copy of the old K&R C programming book and can't look that up at the moment.
int int_array[4];
would define int_array
to be an array of 4 int
s. Slapping typedef
on the front
typedef int int_array[4];
makes int_array
a type alias instead of a variable.
Another example,
int * intp;
Defines intp
to be a pointer to an int
.
typedef int * intp;
Defines intp
to be an alias to the type pointer to an int
.
This gets ugly with more complicated data types as the name of the typedef
ed alias may be buried somewhere in the middle of the definition. A typedef
ed function pointer for example:
typedef void (*funcp)(param_t param1, param_t param2, ...);
vs using
using funcp = void (*)(param_t param1, param_t param2, ...);
Making a 2D Array
If you want a 2D array you could
using int_array2D = int[4][4];
or you could define an array of int_array
using int_array2D = int_array[4];
And of course that means you can
using int_array3D = int_array2D[4];
and keep on going until the cows come home or you've packed on so many dimensions that The Doctor's brain melts.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…