2012-08-04 8 views
6

Ich habe die folgende Quelle Druck istIst der Standardwert eines 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; 
} 

und Konsole geschrieben 00000000 0 (in Visual Studio 2010)

wenn T int * ist, T() == NULL? und ist es immer wahr?

+1

Yup. Immer. http://StackOverflow.com/a/937257/707111 – Ryan

+0

möglich Duplikat von [Was ist der Standardkonstruktor für C++ Zeiger?] (http://StackOverflow.com/questions/936999/what-is-the-default-constructor -für-c-pointer) – Troubadour

Antwort

8

Ja. Ein Wert-initialisierter Zeiger ist immer Null.

0

Ja. Es ist Nullzeiger. Und warum es den Druck:

00000000 

, weil es 4-Byte wird unter Verwendung der Null-Adresse darzustellen (in Hexadezimal-Format).

Auf 64-Bit-Maschine, es kann drucken statt (Hexadezimal-Format):

0000000000000000 
9

Das nennt man Wert-Initialisierung, Sie 0 garantiert.

Plus Sie brauchen nicht ein so kompliziertes Beispiel zu demonstrieren:

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

Gott, 55k Ruf und du antwortest immer noch diese dumme Frage in weniger als einer Minute. Warum behaltst du nicht dein Wissen für kompliziertere Fragen und gibst Neulingen die Chance, etwas Ansehen aufzubauen? – akappa

+1

@akappa Ich habe ein Ziel für 100k gesetzt ... –

+0

Ich sehe. Ich habe Ihre Antwort geupdated, um Sie bei der Erreichung Ihres Meilensteins zu unterstützen: P – akappa

Verwandte Themen