Duplicar posible:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?constructor por defecto para int
En una respuesta a this question se dice que
enteros son como 0-construida por defecto, como si los inicializó con int(). Otros tipos primitivos se inicializan de manera similar (por ejemplo, double(), long(), bool(), etc.).
Justo cuando estaba explicando esto a un colega mío inventé el siguiente código, compiled (gcc-4.3.4) and ran, y observé un comportamiento inesperado.
#include <iostream>
int main() {
int i();
std::cout << i << std::endl; // output is 1
}
¿Por qué es la salida 1
pero 0
?
Esto se explica en: [¿Por qué es un error usar un conjunto vacío de corchetes para llamar a un constructor sin argumentos?] (Http: //stackoverflow.com/questions/180172/why-is-it-an-error-to-use-an-empty-set-of-brackets-to-call-a-constructor-with-no) –
Estoy sorprendido incluso compila, ya que parece que te topaste con el [análisis más irritante] (http://en.wikipedia.org/wiki/Most_vexing_parse). –
Felicitaciones por descubrir [el análisis más irritante] (http://en.wikipedia.org/wiki/Most_vexing_parse). – dasblinkenlight