6

以下のソースを書きました

#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? そしてそれは常に真実ですか?

4

3 に答える 3

9

これは値の初期化と呼ばれ、保証され0ます。

さらに、デモンストレーションにこのような複雑な例は必要ありません。

typedef int* T;
int main()
{
   T x = T();
   std::cout << x;
}
于 2012-08-04T17:33:59.510 に答える
8

はい。値で初期化されたポインターは常に null です。

于 2012-08-04T17:32:45.640 に答える
0

はい。ヌルポインタです。そして、なぜそれが印刷されているのですか:

00000000

null アドレスを表すために 4 バイトを使用しているため (16 進形式)。

64 ビット マシンでは、代わりに次のように表示される場合があります (16 進形式):

0000000000000000
于 2012-08-04T17:33:54.937 に答える