Why doesn't the order of methods in a class matter in C++?

前端 未结 3 484
误落风尘
误落风尘 2021-01-21 06:11

I have been programming in C++ for quite some time and I never thought about this until today.

Consider the following code:

struct foo
{
  // compiles fi         


        
3条回答
  •  深忆病人
    2021-01-21 06:45

    For the most part, a C++ file is parsed top-to-bottom, so entities must be declared before they are used.

    In your class, bar2 and b are invalid because they both make use of my_int_type, which has not yet been declared.

    One exception to the "top-to-bottom" parsing rule is member functions that are defined inside the definition of their class. When such a member function definition is parsed, it is parsed as if it appeared after the definition of the class. This is why your usage of my_int_type in bar is valid.

    Effectively, this:

    struct foo
    {
        void bar()
        {
            my_int_type b;
        }
    
        typedef int my_int_type;
    };
    

    is the same as:

    struct foo
    {
        void bar();
    
        typedef int my_int_type;
    };
    
    inline void foo::bar()
    {
        my_int_type b;
    }
    

提交回复
热议问题