- Как я могу делать то, что хочу (то есть инициализировать массив в конструкторе (не назначая элементы в теле)). Это вообще возможно?
Да. Он использует структуру, которая содержит массив. Вы говорите, что уже знаете об этом, но тогда я не понимаю вопроса. Таким образом, вы do инициализируете массив в конструкторе, без присваиваний в теле. Это то, что делает boost::array
.
Говорит ли стандарт C ++ 03 что-либо особенное об инициализации агрегатов (включая массивы) в инициализаторах ctor? Или недействительность приведенного выше кода является следствием некоторых других правил?
Mem-инициализатор использует прямую инициализацию. И правила пункта 8 запрещают подобные вещи. Я не совсем уверен в следующем случае, но некоторые компиляторы допускают это.
struct A {
char foo[6];
A():foo("hello") { } /* valid? */
};
См. этот GCC PR для получения дополнительной информации.
Решают ли списки инициализаторов C ++ 0x проблему?
Да, они делают. Однако ваш синтаксис неверен, я думаю. Вы должны использовать фигурные скобки напрямую для запуска инициализации списка
struct A {
int foo[3];
A():foo{1, 2, 3} { }
A():foo({1, 2, 3}) { } /* invalid */
};