2012-08-04 99 views
6

我寫了下面的源是一個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; 
} 

和控制檯打印爲00000000 0(在Visual Studio 2010)

如果T爲int *,T()== NULL?它總是如此嗎?

+1

是啊。總是。 http://stackoverflow.com/a/937257/707111 – Ryan 2012-08-04 17:33:14

+0

可能的重複[什麼是C++指針的默認構造函數?](http://stackoverflow.com/questions/936999/what-is-the-default-constructor -for-c-pointer) – Troubadour 2012-08-04 17:48:01

回答

8

是的。值初始化的指針始終爲空。

0

是的。它是空指針。以及爲什麼它是打印:

00000000 

,因爲它是用4個字節來表示空地址(十六進制格式)。

在64位機,它可能打印此代替(十六進制格式):

0000000000000000 
9

這就是所謂的值初始化,你保證0

另外,你不需要這麼複雜的例子來說明:

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

上帝,55k聲望,你仍然在不到一分鐘的時間內回答那些愚蠢的問題。你爲什麼不把自己的知識留給更復雜的問題,讓新人有機會建立一些聲譽? – akappa 2012-08-04 17:49:09

+1

@akappa我設定了一個100k的目標... – 2012-08-04 17:50:24

+0

我明白了。我提出了你的答案,以支持達成你的里程碑:P – akappa 2012-08-04 18:23:58