Will it be correct to say that constructor with argument default values equivalent to default constructor ?
The below program :
#include <iostream>
using namespace std;
class X
{
    int i;
    char ch;
public:
    X()
    {
        cout << "<" << __PRETTY_FUNCTION__ << "> :" << this << endl;
    }
    X(int ii = 0) : i(ii)
    {
        cout << "<" << __PRETTY_FUNCTION__ << "> :" << this << ", i=" << i << endl;
    }
    ~X() { cout << "X::~X()" << endl; }
};
void f()
{
    static int i;
    static X x1(47);
    static X x2;
}
int main(int argc, char *argv[])
{
    f();
    return 0;
} ///:~
refuses to compile if int ii =0. i.e., default value is provided to ii
StaticObjectsInFunctions.cpp:30:14: error: call of overloaded ‘X()’ is ambiguous
   30 |     static X x2;
      |              ^~
StaticObjectsInFunctions.cpp:17:5: note: candidate: ‘X::X(int)’
   17 |     X(int ii = 0) : i(ii)
      |     ^
Aucun commentaire:
Enregistrer un commentaire