Приложение написано на C ++ 98, и я не могу изменить его в настоящее время. Ситуация выглядит так:
struct foo
{
int x;
int y;
int z;
}
class myClass
{
public:
myClass();
struct foo bar;
int baz;
};
myClass::myClass() :
bar({0}),
baz(0)
{
//something else.
}
int main(int argc, char** argv)
{
myClass* thing = new myClass();
cout << thing.bar.z << endl; //want a guaranteed zero here.
}
Выше работает, но выдает:
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11.
, что вполне ожидаемо. Я не могу сделать bar({0})
в списке инициализаторов с C ++ 98. Остается вопрос, как правильно это сделать.
Я могу придумать пару способов, которыми будет работать - memset, присваивать значения полям в конструкторе, присваивать с помощью конструктора копирования по умолчанию структуры и т. Д. Я не знаю, какой способ считается «самый правильный» в этой ситуации, хотя.