mardi 2 mars 2021

How do we understand the behavior of Value initialization in C++11

I'm trying to figure out what Value initialization is in C++11 so I read this link: https://en.cppreference.com/w/cpp/language/value_initialization.

So here is one of the rules:

  1. if T is a class type with no default constructor or with a user-provided or deleted default constructor, the object is default-initialized;

...

I can't understand the rule very well.

I wrote a simple example:

struct Test {
    int i;
    Test() = delete;
    double d;
};

int main()
{
    Test t{};
    std::cout << t.i << std::endl;
    std::cout << t.d << std::endl;
    return 0;
}

As you see, I've deleted the default constructor, so Test t{}; should be default-initialized, meaning that t.i and t.d should be indeterminate values, right? However, both of them are 0. Ofc I knew that indeterminate value means any value is possible, but I still believe that it is zero-initialized, instead of default-initialized. Because after changing Test() = delete; into Test() = default;, the values of i and of d are two random numbers, intead of two 0.

So, a class with a deleted default constructor is initialized by default-initialized or by zero-initialized?

Aucun commentaire:

Enregistrer un commentaire