6

次の構造体があるとしましょう。

struct myStruct
{
 int x;
 int y;
 int z;
 int w;
};

次の関数を呼び出すときに、この構造体をデフォルト値に初期化したい。それが役立つなら、私は単純なゼロ初期化を探しています。

void myFunc(myStruct param={0,0,0,0})
{
 ...
}

ただし、このコードではコンパイルエラーが発生します。VS2003とVS2008を試しました。

注:コンストラクターの使用について言及している他の回答を見てきました。ただし、初期化に使用している値をユーザーに確認してもらいたい。

4

2 に答える 2

6

myStructにデフォルトのコンストラクターを追加すると、問題が解決します。

struct myStruct {
   myStruct(): x(0),y(0), z(0), w(0) { }   // default Constructor
   int x, y, z, w;
};

関数宣言:

void myFunc(myStruct param = myStruct());
于 2014-06-02T09:47:12.500 に答える
2

値の初期化を完全に実装する最新の C++ コンパイラでは、myStruct のデータ メンバーをゼロで初期化するには、次の値で初期化された既定値を使用するだけで十分です。

myFunc(myStruct param=myStruct())

他のコンパイラでは、次のようなものを使用する必要があります。

myStruct zeroInitilizer() {
   static myStruct zeroInitilized;
   return zeroInitilized;
}
myFunc(myStruct param=zeroInitilizer())

コンパイラの仕様を避けるには、http://www.boost.org/doc/libs/1_53_0/libs/utility/value_init.htmを使用することを検討してください

于 2013-03-09T07:34:27.967 に答える