Question

En lisant les réponses à cette question Je suis un doute en ce qui concerne la construction par défaut des objets dans le vecteur. Pour le tester, j'ai écrit le code de test suivant:

struct Test
{
    int m_n;

    Test(); 

    Test(const Test& t);

    Test& operator=(const Test& t);
};

Test::Test() : m_n(0)
{
}

Test::Test(const Test& t)
{
    m_n = t.m_n;
}

Test& Test::operator =(const Test& t)
{
    m_n = t.m_n;
    return *this;
}


int main(int argc,char *argv[])
{
    std::vector<Test> a(10);
    for(int i = 0; i < a.size(); ++i)
    {
        cout<<a[i].m_n<<"\n";
    }

    return 0;
}

Et bien sûr, le test struct constructeur par défaut est appelé lors de la création de l'objet vectoriel. Mais ce que je ne suis pas en mesure de comprendre comment est la STL initialise les objets que je crée un vecteur de type de données de base telles que vecteur de ints car il est constructeur par défaut pour elle? à savoir comment tout les ints dans le vecteur ont une valeur 0? devrait-il pas des ordures?

Était-ce utile?

La solution

Il utilise l'équivalent du constructeur par défaut pour ints, qui est à zéro les initialiser. Vous pouvez le faire explicitement:

int n = int();

définit n à zéro.

Notez que la construction par défaut est utilisé et nécessaire si le vecteur est donné une taille initiale. Si vous avez dit:

vector <X> v;

il n'y a pas d'exigence que X a un constructeur par défaut.

Autres conseils

std::vector<Type> a(10);        // T could be userdefined or basic data type

Vector appelle essentiellement default pour le type auquel il fait remarquer: Type()

  • si elle est le type de données de base comme int, doubles sont là alors int (), double () {int () va obtenir la valeur 0}
  • si le type de données défini par l'utilisateur puis constructeur par défaut serait appelé.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top