Decltype

di il
3 risposte

Decltype

Ciao a tutti , ho una domanda sul Decltype . Considerate solo il "For" di questo programma ( dove vi è un errore che non ci interessa ora ).
vector<int> ivec; // empty vector
for (decltype(ivec.size()) ix = 0; ix != 10; ++ix)
ivec[ix] = ix; // disaster: ivec has no elements
Perchè ha usato decltype(ivec.size()) come tipo per l'index e perchè proprio ivec.size() tra le parentesi ?
Grazie

3 Risposte

  • Re: Decltype

    1) decltype e' un operatore del C++11 usato solo durante il processo di compilazione il cui compito e' quello di di dire:

    voglio usare come tipo della variabile/parametro/valore di ritorno, lo stesso tipo dell'espressione che ti ho indicato tra parentesi

    E' utile sopprattuto con i template perche' i template associati alle collezioni definiscojo dei tipo (puntatori, reference, il tipo dell'indice del vettore, ecc) che potrebbe risultare complicato scrivere a mano, sopprattutto se il template dipende da un tip che a sua volta e' un template ...

    2) poiche' il tipo dell'indice in un vector deve essere dello stesso tipo numerico di vector.size(), ecco del perche' del'espressione decltype(ivec.size()


    Per quanto riguardano le castronate (alias disaster ):

    1) instanzi un vettore di lunghezza 0 e tenti di inserire degli elementi agli indici 0...9: crash assicurato . Il vectori si ridimensiona dinamicamente, ma solo se usi il metodo corretto: push_back

    2) ivec.size() e' di tipo size_t fondamentalmente un unsigned int mentre il tuo vettore contiene degli int: c'e' un problema di segno nell'assegnazione
  • Re: Decltype

    Grazie mille ; mi è rimato un ultimo dubbio , per quale motivo il tipo dell'indice in un vector deve essere dello stesso tipo numerico di vector.size() ?
  • Re: Decltype

    Se ci pensi un attimo, hai la risposta sotto il naso
Devi accedere o registrarti per scrivere nel forum
3 risposte