Инициализация массива элементов в списке инициализации конструктора (до C ++ 11)

Насколько я знаю, до C ++ 11 единственным способом инициализации массива-члена в списке инициализации конструктора было, например, следующее:

MyClass::MyClass(int arg) : member(arg), memberArray() {
// anything else that needs to be done in the c'tor
}

Тем не менее, у меня было несколько человек, которые говорили мне, что они недовольны этим методом, и что было бы безопаснее / более читабельно инициализировать его нулями в for цикл в теле конструктора.

У меня пока нет поддержки C ++ 11, поэтому я не могу использовать список инициализаторов и т. Д. Есть ли какие-либо рекомендации, которые кто-либо слышал об этом, препятствуют инициализации массивов элементов в списке инициализатора конструктора?

Кроме того, тестирование показывает, нет, но не должно быть никаких проблем с использованием этого синтаксиса для многомерного массива, правильно? (Например, это не какая-то часть стандарта, который некоторые компиляторы испортили по какой-то причине …)

Я не хочу, чтобы это был субъективный вопрос — мне просто интересно знать, есть ли веская причина использовать / не использовать приведенный выше синтаксис.

Большое спасибо за любую помощь.

5

Решение

Вы можете посмотреть, как это связанный вопрос на 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() )
{
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]