Multiple Default Constructors

后端 未结 2 1079

From this stack overflow question the answer contains this quote:

... definition says that all default constructors (in case there are multiple) ...

2条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-13 20:48

    Default constructors don't have to have no parameters; they just need to be invocable with no arguments.

    This condition is fulfilled by any constructor whose arguments all have defaults.

    [class.dtor/1]: A default constructor for a class X is a constructor of class X for which each parameter that is not a function parameter pack has a default argument (including the case of a constructor with no parameters). [..]

    struct Foo
    {
       Foo(int a = 0);
       Foo(std::string str = "");
    };
    

    Now, of course, in this example you cannot actually instantiate a Foo using either of them without providing an argument (the call would be ambiguous). But Foo is still usable, and these are still "default constructors". That's just how the standard has decided to categorise things, for the purpose of defining rules. It doesn't really affect your code or programming.

    (By the way, I didn't want to distract but you should have explicit on both of those!)

提交回复
热议问题