За описателем может идти начальное значение описываемого идентификатора. инициализатор: = выражение-присваивания = { список-инициализаторов, opt } (список-выражений) список-инициализаторов: выражение-присваивания список-инициализаторов, выражение-присваивания { список-инициализаторов, opt } Автоматические, регистровые, статические и внешние переменныеможно инициализировать произвольными выражениями, содержащимиконстанты и описанные ранее переменные и функции. int f(int); int a = 2; int b = f(a); int c(b); Указатель типа const T*, т.е. указатель на константу T, можетинициализироваться указателем типа T*, но инициализация для указателейв обратном порядке незаконна. Объекты типа T можно инициализироватьобъектами типа T независимо от использования спецификаций const илиvolatile в типах инициализируемой переменной или инициализатора,например, int a; const int b = a; int c = b; const int* p0 = &a; const int* p1 = &b; int* p2 = &b; // ошибка: указатель без const // настраивается на объект const int *const p3 = p2; int *const p4 = p1; // ошибка: указатель без const // настраивается на объект const const int* p5 = p1; Здесь причина обеих ошибок одна: если допустить подобную инициализацию,она позволит изменять с помощью указателя без соответствующейспецификации значение чего-то, что было описано как const. На выражения для стандартных значений параметров накладываетсябольше ограничений, см. $$R.8.2.6. Инициализация объектов классов с помощью конструкторов описываетсяв $$R.12.6.1. Копирование объектов классов описывается в $$R.12.8.Порядок инициализации статических объектов определяется в $$R.3.4и $$R.6.7. Гарантируется, что переменные статического класса памяти ($$R.3.5),которые не были инициализированы, в качестве начального значенияполучат 0, приведенный к нужному типу. То же справедливо для статическихчленов объектов класса. Начальные значения автоматических ирегистровых переменных, которые не были инициализированы, неопределены. Если инициализатор относится к указателю или объекту арифметическоготипа, он состоит из одного выражения (возможно в скобках). В качественачального значения объекта берется значение выражения, происходяттакие же преобразования типа, как и в случае присваивания. Заметим, что поскольку () не является инициализатором,описание X a(); задает не объект a типа класс X, а является описанием функции безпараметров, возвращающей X. Инициализатор для статического члена принадлежит областивидимости члена класса, например, int a; struct X { static int a; static int b; }; int X::a = 1; int X::b = a; // X::b = X::a