Страница:
332 из 357
Если, однако, инициализтор не начинается с левой фигурной скобки, то из списка брутся только элементы, достаточные для сопоставления элеметамсоставного объекта; все остающиеся элементы оставляются для инициализации следующего элемента составного объекта, частью которого является текущий составной объект.
Например,
int x[] = (* 1, 3, 5 *);
описывает и инициализирует x как одномерный массив, имющий три элемента, поскольку размер не был указан и дано три инициализатора.
float y[4][3] = (* (* 1, 3, 5 *), (* 2, 4, 6 *), (* 3, 5, 7 *) *);
является полностью снабженной квадратными скобками инциализацией: 1,3 и 5 инициализируют первый ряд массива y[0], а именно, y[0][0], y[0][1] и y[0][2]. Аналогично, следующие две строки инициализируют y[1] и y[2]. Инициализатор заканчвается раньше, поэтому y[3] инициализируется 0-ями. В тоноcти тот же эффект может быть достигнут с помощью
float y[4][3] = (* 1, 3, 5, 2, 4, 6, 3, 5, 7 *);
Инициализатор для y начинается с левой фигурной скобки, но не начинается с нее инициализатор для y[0], поэтому ипользуется три значения из списка. Аналогично, следующие три успешно используются для y[1] и следующие три для y[2]. Так же
float y[4][3] = (* (* 1 *), (* 2 *), (* 3 *), (* 4 *) *);
инициализирует первый столбец y (рассматриваемого как двумерный массив) и оставляет остальные элементы нулями.
8.6.2 Объекты Классов
Объект с закрытыми членами не может быть инициализован списком инициализаторов; это же относится к объекту объединние. Объект класса с конструктором должен инициализироваться.
|< Пред. 330 331 332 333 334 След. >|