Насколько я знаю, до C ++ 11 единственным способом инициализации массива-члена в списке инициализации конструктора было, например, следующее:
MyClass::MyClass(int arg) : member(arg), memberArray() {
// anything else that needs to be done in the c'tor
}
Тем не менее, у меня было несколько человек, которые говорили мне, что они недовольны этим методом, и что было бы безопаснее / более читабельно инициализировать его нулями в for
цикл в теле конструктора.
У меня пока нет поддержки C ++ 11, поэтому я не могу использовать список инициализаторов и т. Д. Есть ли какие-либо рекомендации, которые кто-либо слышал об этом, препятствуют инициализации массивов элементов в списке инициализатора конструктора?
Кроме того, тестирование показывает, нет, но не должно быть никаких проблем с использованием этого синтаксиса для многомерного массива, правильно? (Например, это не какая-то часть стандарта, который некоторые компиляторы испортили по какой-то причине …)
Я не хочу, чтобы это был субъективный вопрос — мне просто интересно знать, есть ли веская причина использовать / не использовать приведенный выше синтаксис.
Большое спасибо за любую помощь.
Вы можете посмотреть, как это связанный вопрос на StackOverflow: использование статических функций для инициализации ваших массивов элементов в списке инициализации может достичь того, что вы ищете:
class MyClass
{
typedef std::array< int, 2 > t_myA;
static t_myA fillFunction(){ static t_myA const ret = {1,2}; return ret; };
t_myA myArray;
public MyClass();
}
MyClass::MyClass()
: myArray( fillFunction() )
{
}
Других решений пока нет …