editコメントに基づいて少し微調整された例
ちょっとしたコードと質問 (明確にするために、これは C++ の質問です):
#include <cstdio>
struct MYSTRUCT1 {
int asdf[4];
} MyStruct1;
struct MYSTRUCT2 {
int asdf[4];
MYSTRUCT2() : asdf() {}
} MyStruct2;
template <class T>
void test() {
T blah = {{1,-1,1,-1}};
for( int ii = 0; ii < 4; ii++ ) {
printf( "%d ", blah.asdf[ii] );
}
printf( "\n" );
}
int main() {
// Works fine; MyStruct1 doesn't define a constructor
test<MyStruct1>();
// Doesn't work; g++ complains I need to use `-std=c++0x`
// and/or define a constructor that allows the initialization
// taking place inside `test()`
test<MyStruct2>();
}
ここにいくつかの質問があります:
MyStruct1
のインスタンスをその方法で初期化できるようにする魔法は何ですか- c++98 でこれに対する回避策はありますか?
参考までに、スタックに割り当てられた構造体を強制的にゼロ初期化する手段としてコンストラクターを使用しようとしていますが、このスタイルの初期化を禁止したくありません。