Default constructor c++

前端 未结 4 1923
南笙
南笙 2021-01-07 04:19

I am trying to understand how default constructor (provided by the compiler if you do not write one) versus your own default constructor works.

So for example I wrot

相关标签:
4条回答
  • 2021-01-07 05:04

    For the last one NO constructor gets called.

    For that matter no code even gets generated. All you're doing is telling (declaring) the compiler that there's a function n which returns A and takes no argument.

    0 讨论(0)
  • 2021-01-07 05:04

    No there is not a different constructor.

    A n();
    

    is treated as a declaration of function taking no arguments and returning A object. You can see this with this code:

    class A
    {
    public:
        int x;
    
    public:
    
        A(){ std::cout << "Default constructor called for A\n";}
    
        A(int x){
    
            std::cout << "Argument constructor called for A\n";
    
            this->x = x;
    
        }
    };
    
    
    int main(int argc, char const *argv[])
    {
    
        A m;
        A p(0);
        A n();
        n.x =3;
    
        return 0;
    }
    

    The error is:

    main.cpp:129: error: request for member ‘x’ in ‘n’, which is of non-class type ‘A()’

    0 讨论(0)
  • 2021-01-07 05:10
     A n();
    

    declares a function, named n, that takes no arguments and returns an A.

    Since it is a declaration, no code is invoked/executed (especially no constructor).

    After that declaration, you might write something like

    A myA = n();
    

    This would compile. But it would not link! Because there is no definition of the function n.

    0 讨论(0)
  • 2021-01-07 05:19
    A n();
    

    could be parsed as an object definition with an empty initializer or a function declaration.

    The language standard specifies that the ambiguity is always resolved in favour of the function declaration (§8.5.8).

    So n is a function without arguments returning an A.

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