В С++ можно позволить компилятору самому определить тип переменной.
При написании программ может быть невозможно заранее определить тип выражения. Для этих целей был введен спецификатор auto
. В отличие от
таких спецификаторов типа, как int
или double
, задающих определенный тип, спецификатор auto приказывает компилятору вывести тип из инициализатора.
//finalNumber инициализируется результатом суммы
auto finalNumber = num1 + num2;
Подобно любому другому спецификатору типа, используя auto
можно определить несколько переменных.
auto i = 0, *p = &i; // i - int, p - указатель на int
auto &f = i; // f - ccылка на int
Спецификатор decltype
возвращает тип его операнда. Это позволяет компилятору проанализировать выражение и определить его тип, но не вычислить его результат.
//result имеет тот же тип, который возвращает func()
decltype(func()) result = x;
Операнд обязательно должен быть определен. Ссылки не могут использоваться в качестве операнда.
int i = 0, &j = i;
decltype(i) x = 0; //x имеет тип int
decltype(j) y = x; //y имеет тип int& и связана с x
decltype(j) z; //ошибка: z - неинициализированная ссылка