FAQ
for [no.it.programmering.c++]
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.