innholdsfortegnelseFAQ for [no.it.programmering.c++]

2.4 Hvordan nullstiller jeg et array eller en struct?

Som nybegynner bør du bruke std::vector, std::string osv., ikke rå arrays.

For eksempel:


    #include <iostream>      // std::cout, std::endl
    #include <vector>        // std::vector

    int main()
    {
        std::vector<int>    v(10);

        for( std::size_t i = 0;  i < v.size();  ++i )
        {
            std::cout << v[i] << std::endl;
        }
    }

Dette programmet skriver ut 10 nullere.

Tilsvarende med rått (C/C++ språknivå) array:


    #include <iostream>      // std::cout, std::endl

    // Type-safe "magic" to find number of elements in an array.
    template< typename T, std::size_t N >
    inline std::size_t size( T const (&)[N] ){ return N; }

    int main()
    {
        int    v[10]    = {0};

        for( std::size_t i = 0;  i < size( v );  ++i )
        {
            std::cout << v[i] << std::endl;
        }
    }

Cluet her er at i en initialisator, {0}, med for få elementer, her kun ett, betraktes de ikke oppgitte elementene som å være 0.

For bruk av new til å allokere en struct S uten noen egendefinert konstruktør:


    new S

gir ikke initialisering, mens


    new S()

i følge standardens $5.3.4/15 skal gi nullstilling (defaultinitialisering av en struct uten egendefinert konstruktør), så fremt anropet er tillatt. Enkelte kompilatorer, som f.eks. Visual C++ 7.0, gir imidlertid ikke slik nullstilling. En løsning er å definere en konstruktør som nullstiller innholdet.