Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
575 views
in Technique[技术] by (71.8m points)

c++11 - Using c++ typedef/using type alias

I am reading C++ primer book and completely don't understand one line:

 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;
 }

Ok typedef is same as using. Does it mean int[4][4] is now int and how to understand that? And what type is int_array in for loop?

Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

TL;DR

Both are doing the exact same thing: Defining int_array as an alias of an array of 4 ints

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 typedefs 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 ints. 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 typedefed alias may be buried somewhere in the middle of the definition. A typedefed 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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...