When should you use a class vs a struct in C++?

后端 未结 25 1712
误落风尘
误落风尘 2020-11-22 00:18

In what scenarios is it better to use a struct vs a class in C++?

25条回答
  •  臣服心动
    2020-11-22 01:00

    There are lots of misconceptions in the existing answers.

    Both class and struct declare a class.

    Yes, you may have to rearrange your access modifying keywords inside the class definition, depending on which keyword you used to declare the class.

    But, beyond syntax, the only reason to choose one over the other is convention/style/preference.

    Some people like to stick with the struct keyword for classes without member functions, because the resulting definition "looks like" a simple structure from C.

    Similarly, some people like to use the class keyword for classes with member functions and private data, because it says "class" on it and therefore looks like examples from their favourite book on object-oriented programming.

    The reality is that this completely up to you and your team, and it'll make literally no difference whatsoever to your program.

    The following two classes are absolutely equivalent in every way except their name:

    struct Foo
    {
       int x;
    };
    
    class Bar
    {
    public:
       int x;
    };
    

    You can even switch keywords when redeclaring:

    class Foo;
    struct Bar;
    

    (although this breaks Visual Studio builds due to non-conformance, so that compiler will emit a warning when you do this.)

    and the following expressions both evaluate to true:

    std::is_class::value
    std::is_class::value
    

    Do note, though, that you can't switch the keywords when redefining; this is only because (per the one-definition rule) duplicate class definitions across translation units must "consist of the same sequence of tokens". This means you can't even exchange const int member; with int const member;, and has nothing to do with the semantics of class or struct.

提交回复
热议问题