2013-06-16 28 views
13

Następujący kod może przekazać kompilację i wyświetli 0 na konsoli. Widziałem podobny kod w STL. Moje pytanie brzmi, czy typ int w C++ ma konstruktora? Czy int() jest wywołaniem jakiejś zdefiniowanej funkcji?co robi int() w C++?

int main() 
{ 
    int a = int(); 
    cout<<a<<endl; 
    return 0; 
} 

Odpowiedz

19

W tym kontekście

int a = int(); // 1) 

to wartość inicjuje a, tak, że posiada wartość 0. Ta składnia nie wymaga obecności konstruktora dla wbudowanych typów, takich jak int.

Należy pamiętać, że ta forma jest konieczna, ponieważ następujący jest analizowany jako deklaracji funkcji, raczej niż inicjalizacji:

int a(); // 2) function a() returns an int 

w C++ 11 można osiągnąć inicjalizacji wartości z bardziej intuicyjnej składni:

int a{}; // 3) 

Edit w tym konkretnym przypadku, nie ma korzyści z użyciem 1) lub 3) przez

int a = 0; 

ale uważają

template <typename T> 
void reset(T& in) { in = T(); } 

następnie

int i = 42; 
reset(i); // i = int() 
+1

Na marginesie, C++ 11, korzystnym sposobem di jest składnia 'int a {}'. – Fabien

+1

@Fabien byłem w trakcie dodając, że :) – juanchopanza

+11

Mam szczerą nadzieję, że 'int a = 0;' nie spadła z mody jeszcze. –

-3

int() jest liczbą całkowitą konstruktor więc innymi słowy inicjuje zmienną z domyślnej wartości 0

+5

'int' nie ma konstruktora. –

-3

int() jest construstor klasy int, zainicjuje zmienną ur a do domyślnej wartości liczby całkowitej, tj. 0. Nawet jeśli nie wywołać konstruktora jawnie się defualt konstruktora, tj int(), jest niejawnie wezwany do zainicjowania zmiennej. w przeciwnym razie w zmiennej będzie wartość śmieci.

+4

'int' nie jest klasą i nie ma konstruktora. – juanchopanza