Pregunta

Durante la lectura de las respuestas a esta pregunta tengo una duda con respecto a la construcción por defecto de los objetos en el vector. Para probar que escribí el siguiente código de prueba:

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;
}

Y, por supuesto, la estructuras de prueba por defecto se llama al constructor al crear el objeto vectorial. Pero lo que no soy capaz de entender es cómo el TEL inicializar los objetos que creo un vector de tipo de datos básicos tales como vector de enteros ya que no es constructor por defecto para ello? es decir, ¿cómo todos los enteros en el vector tienen un valor 0? ¿no debería ser la basura?

¿Fue útil?

Solución

Se utiliza el equivalente del constructor por defecto para los enteros, que es inicializar a cero ellas. Puede hacerlo de forma explícita:

int n = int();

establecerá n a cero.

Tenga en cuenta que la construcción predeterminada sólo se utiliza y se requiere si el vector se le da un tamaño inicial. Si usted dijo:

vector <X> v;

no existe el requisito de que X tiene un constructor por defecto.

Otros consejos

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

Vectores llama básicamente default para el tipo al que apunta: Type()

  • si es el tipo de datos básicos como int, dobles están allí entonces int (), dobles () {int () recibirá el valor 0}
  • tipo de datos si el usuario define entonces constructor por defecto sería llamado.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top