Proto musí const členy inicializovat v konstruktoru inicializátor spíše než ve svém těle?

hlasů
60

Proto musí členové třídy deklarován jako constinicializovat v seznamu konstruktoru Inicializátor spíše než v konstruktoru těle?

Jaký je rozdíl mezi těmito dvěma?

Položena 10/12/2008 v 07:35
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
92

V jazyce C ++, objekt je považován za zcela inicializován při provedení vstupuje do těla konstruktoru.

Řekl jsi:

„Chtěl jsem vědět, proč musí být const intialized v konstruktoru seznam Inicializátor spíše než v jeho těle?“.

To, co chybí, je, že inicializace se děje v seznamu inicializace a přiřazení se děje v těle konstruktoru. Kroky v logice:

1) const objekt může být inicializován pouze.

2) Objekt má všechny jeho členy iniciován v seznamu inicializace. Dokonce i když nechcete explicitně inicializovat tam bude kompilátor šťastně učinit pro vás :-)

3) Z tohoto důvodu uvedení 1) a 2) dohromady, člen, který je const mohou jen někdy mít hodnotu přiřazenou k němu při inicializaci, která se stane v průběhu seznamu inicializace.

Odpovězeno 10/12/2008 v 08:01
zdroj uživatelem

hlasů
9

const a referenční proměnné musí být inicializovány na trati jsou deklarovány.

 class Something  
 {  
     private:  
      const int m_nValue;  
     public:  
      Something()  
      {  
          m_nValue = 5;  
      }  
  };

by produkoval kódu ekvivalentní;

const int nValue; // error, const vars must be assigned values immediately  
nValue = 5; 

Přiřazení const nebo referenční hodnoty proměnné členů v těle konstruktoru není dostačující.

C ++ poskytuje jiný způsob inicializace proměnné členů, které umožňují inicializovat proměnné členů, pokud jsou vytvořeny, než později. To se děje prostřednictvím použití seznamu inicializace.

Můžete přiřadit hodnoty proměnným dvěma způsoby: explicitně a implicitně: Pohled na plaincopy clipboardprint?

int nValue = 5; // explicit assignment  
double dValue(4.7); // implicit assignment  

Použití seznamu inicializace je velmi podobný dělá implicitní přiřazení.

Nezapomeňte, že seznam inicializace člen, který se používá k inicializaci základny a členů datových objektů, je v definici, ne deklaraci konstruktoru.

Více informací o CPP-tutorial a kód Wrangler .

Odpovězeno 10/12/2008 v 07:57
zdroj uživatelem

hlasů
-2

Vzhledem k tomu, konstantní proměnné a odkazy musí být iniciovány v čase deklarace, tj před použitím. Ale Constructors přiřadí hodnotu na varaible není initailize proměnnou proto je nutné použít initailizier seznamu konstantní a reference

Odpovězeno 12/08/2016 v 09:05
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more