const og reference members kan kun initialiseres og derfor skal første metode anvendes på den slags. Initialiseringerne bør (skal) ske i samme rækkefølge som erklæringerne.
Den anden metode kan naturligvis anvendes på alle slags member objekter, blot objektet har defineret en gyldig assignment-operator.
jeg vil MEGET gerne se et eksempel på to klasser hvor den ene klasse har en member (altså ikke en pointer) af den anden klasse hvor den anden klasse ikke har en constuctor uden argumenter compile med den anden metode
I min 2ed 1998 er det altså Item 13 - og lige netop i den slags tilfælde (dependency mellem initialiseringer) vil jeg klart foretrække assignments inde i constructor fordi der er det netop krystal klart hvad der sker i hvilken rækkefølge
Og de performance hensyn han mener taler for initialisering udenfor i Item 12 (i min udgave) vil jeg til enhver tid totalt ignorere for at få mere letlæselig kode.
Svar til: Jeg kan pure afvise at .. "Initialiseringerne bør (skal) ske i samme rækkefølge som erklæringerne" det er ikke rigtigt.
Så prøv venligst følgende eksempel (kompileret med Visual C++ 7)
Det er ikke det, dit eksempel gør. Erklæringerne er denne del: int a,b,c;
initialiseringerne af disse kan ske i vilkårlig rækkefølge, som dit eksempel også viser. At resultatet så bliver forskelligt fra hvad man måske skulle tro modsiger ikke min påstand.
Kan du se at der for det første eksempel kun bliver kaldt int constructoren X::X(int) I det andet tilfælde bliver default constructoren X::X() først kaldt, derpå bliver assignment operatoren kaldt (X::=(int)). Det ses let at den første metode er mest effiktiv.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.