0

私のコードには、s intbools、pointers などがあります。また、私が定義した型もありtypedefます。contrunctor を使用してオブジェクトで発生するように、デフォルト値の初期化をどのように管理できますか?

私はそれを確認したい

T var;

手つかずの場合は、常にデフォルト値と同じであり、コード アンチェの各行を解析せずにデフォルト値を手動で変更したり、プリプロセッサ マクロを使用したりせずにこれを行うのが好きです。

これは可能ですか?新しいtypedef場合、デフォルト値を定義できますか?

4

3 に答える 3

6

T var{};C++11 では、値の初期化をデフォルト値に取得するように記述できました。

C++03 では、非 POD ラッパーを作成できます。そのデフォルト コンストラクターは、次のように呼び出されT var;ます。

template<class T>
struct default_initializer{
  default_initializer() : value() {}
  default_initializer(T const& v) : value(v) {}
  T value;
};

// somewhere in code
default_initializer<T> var; // calls default ctor and initializes 'value'
                            // to its default value

T var;これにより、通常は宣言によって初期化されないままになっているプリミティブ、POD、および集約型でさえ、安全にデフォルトで初期化できます。

于 2012-07-15T16:45:16.330 に答える
3

プリミティブ型にはコンストラクターがないため、これは不可能です。関数スコープのコンテキストで宣言されたプリミティブ型は、デフォルトでは初期化されず、ガベージが含まれています。グローバル変数としてグローバル スコープで宣言されたプリミティブ変数は、常に に初期化され0ます。

于 2012-07-15T16:42:46.347 に答える
0

ints、bools、ポインター、およびその他のプリミティブ データ型に対して、そのような型の値を宣言するたびに追加のコードを記述せずにこれを実現する方法はありません。ただし、カスタム クラスのインスタンスについては、あります。

于 2012-07-15T16:56:23.177 に答える