вы имеете в виду что-то вроде этого?
List<String> blah = new ArrayList<String>(){{add("asdfa");add("bbb");}};
это инициализация списка массивов во время создания (hack)
const
участники должны быть инициализированы в списке инициализатора, потому что Вы не можете присвоить ссылке или const
участник. Лучше сделать инициализацию участников в списке инициализации, потому что участники затем только инициализируются однажды. Это может быть огромной разницей в производительности (и даже поведение), если участники являются самими классами. Если участники являются всей неконстантой, нессылочными основополагающими типами данных, то различие обычно незначительно.
ПРИМЕЧАНИЕ : существуют времена, где списки инициализации требуются для основополагающих типов данных - конкретно, если тип является постоянным или ссылка. Для этих типов данные могут только быть инициализированы однажды, и таким образом они не могут быть инициализированы в теле конструктора. См. эта статья для получения дополнительной информации.
Примечание, что порядок инициализации участников является порядком участники, объявляется в определении класса, не порядке, которым участники объявляются в списке инициализации. Если предупреждение может быть зафиксировано путем изменения порядка списка инициализации, то я настоятельно рекомендую, чтобы Вы сделали так.
Это - моя рекомендация что:
В дополнение к Greg Hewgill превосходный ответ - переменные константы должны быть установлены в списке инициализации.
Поскольку, в теле конструктора ("в фигурных скобках") членские переменные уже создаются из значения по умолчанию. Это может иметь некоторые последствия производительности, когда у Вас есть членская переменная типа, который имеет нетривиальную конструкцию, когда Вам сначала создали из значения по умолчанию она, и затем Вы присваиваете ей некоторое другое значение в конструкторе, когда у Вас могла быть пользовательская конструкция она непосредственно.
кроме того, некоторые типы не могут быть созданы из значения по умолчанию (например, ссылки) и должны быть созданы в списке инициализации.
Если у Вас есть переменные константы, их значение не может быть установлено через присвоение.
инициализация также немного более эффективна при присвоении значений объектам (не созданный-ins или intrinsics), поскольку временный объект не создается как он, был бы для присвоения.
См. C++, Облегченный FAQ для получения дополнительной информации
Смотрите на собранную мудрость в http://web.tiscali.it/fanelia/cpp-faq-en/ctors.html#faq-10.6
Другое дополнение к ответу Greg: участники, которые имеют типы без конструктора по умолчанию, должны быть инициализированы в списке инициализации.
Ответ Грега Хегвелла содержит несколько отличных советов, но он не объясняет, почему компилятор выдает предупреждение.
Когда список инициализаторов конструктора обрабатывается компилятором, элементы инициализируются в порядке их объявления в объявлении класса, а не в порядке их появления в списке инициализаторов.
Некоторые компиляторы выдают предупреждение, если порядок в списке инициализаторов отличается от порядка в объявлении (поэтому не стоит удивляться, если элементы инициализируются не в порядке списка). Вы не включаете объявление класса, но это вероятная причина предупреждения, которое вы видите.
Обоснованием такого поведения является то, что члены класса всегда должны инициализироваться в одном и том же порядке: даже если класс имеет более одного конструктора (в котором члены могут быть по-разному упорядочены в списках инициализаторов).