2012-08-04 14 views
6

que han escrito la siguiente fuente¿El valor predeterminado es int * NULL?

#include <iostream> 
using namespace std; 

template <class T> 
class AAA 
{ 
public: 
    void f() { cout << T() << " "; } 
}; 

int main (void) 
{ 
    AAA<int*> a; 
    AAA<int> b; 

    a.f(); /// in this case, T() == NULL?? 
    b.f(); 

    return 0; 
} 

e imprimir la consola es 0. 00000000 (en Visual Studio 2010)

si T es int *, T() == NULL? y es siempre verdad?

+1

Sip. Siempre. http://stackoverflow.com/a/937257/707111 – Ryan

+0

posible duplicado de [¿Cuál es el constructor predeterminado para C++ puntero?] (http://stackoverflow.com/questions/936999/what-is-the-default-constructor -for-c-pointer) – Troubadour

Respuesta

8

Sí. Un puntero inicializado de valor siempre es nulo.

0

Sí. Es un puntero nulo. Y por qué se está imprimiendo:

00000000 

porque está utilizando 4 bytes para representar el nulo electrónico (en formato hexadecimal).

El equipo de 64 bits, se puede imprimir este lugar (en formato hexadecimal):

0000000000000000 
9

Esto se llama valor de inicialización, se le garantiza 0.

Además, no es necesario un ejemplo tan complicado de demostrar:

typedef int* T; 
int main() 
{ 
    T x = T(); 
    std::cout << x; 
} 
+2

Dios, 55k de reputación y aún respondes esas tontas preguntas en menos de un minuto. ¿Por qué no mantienes tu conocimiento para una pregunta más complicada, dando a los recién llegados la oportunidad de construir alguna reputación? – akappa

+1

@akappa He establecido un objetivo para 100k ... –

+0

Ya veo. Volví a subir su respuesta para apoyar el logro de su hito: P – akappa

Cuestiones relacionadas