C++ typedef class use

后端 未结 2 946
余生分开走
余生分开走 2021-02-04 06:56

Why use a typedef class {} Name ?

I learnt this in IBM C++ doc, no hint to use here.

相关标签:
2条回答
  • 2021-02-04 07:18

    This answer assumes that there's some interesting content in the class, not just {}.

    In C++, you can have a function with the same name as a class (for compatibility with C), but you pretty much never want to.

    You can't have a function with the same name as a typedef, so doing this protects you against ill-disciplined name choices. Pretty much nobody bothers, and even if you're going to bother you'd probably write it:

    class Name {};
    typedef Name Name; // reserve the name
    

    If the code you're referring to really is as written (I can't see it by following your link), then it's rather like class Name {}; (which is a peculiar thing to write, why would you call an empty class Name?), but modified for the above consideration.

    0 讨论(0)
  • 2021-02-04 07:34

    This is a hangover from the 'C' language.

    In C, if you have

    struct Pt { int x; int y; };
    

    then to declare a variable of this struct, you need to do

    struct Pt p;
    

    The typedef helped you avoid this in C

    typedef struct { int x; int y; } Pt;
    

    Now you can do

    Pt p;
    

    in C.

    In C++, this was never necessary because

    class Pt { int x; int y; };
    

    allowed you to do

    Pt p;
    

    It provides no notational benefits in C++ as it does in C. OTOH, it leads to restrictions because this syntax does not provide any mechanism for construction, or destruction.

    i.e. you cannot use the name typedef name in the constructor or destructor.

    typedef class { int x; int y; } Pt;
    

    You cannot have a constructor called Pt, nor a destructor. So in essence, most of the time, you shouldn't do this in C++.

    0 讨论(0)
提交回复
热议问题