Тип переменной «Копировать» из другой переменной

С добавлением ключевого слова «auto» в С++ 11 мне было интересно, можно ли «скопировать» тип другой переменной или возвращаемый тип функции.

Например, в этом коде:

unsigned short x;
[...] // x is initialized with some value
for(auto i=0;i<x;i++)
{
    [...]
}

i будет int. Можно ли присвоить i тот же тип, что и x, не объявляя его вручную как 'unsigned short'?

В принципе, я ищу что-то вроде:

[...]
for(type(x) i=0;i<x;i++)
[...]

person Silverlan    schedule 06.02.2016    source источник
comment
C++11 не добавил ключевое слово auto. Он существует практически с 1972 года.   -  person Kerrek SB    schedule 06.02.2016
comment
@KerrekSB false: C++11 представил модификатор auto для локальных переменных, который упоминается в этом вопросе. en.cppreference.com/w/cpp/language/auto   -  person Croll    schedule 21.11.2018
comment
@Croll: это не связано. Все, что я сказал, это то, что auto уже было ключевым словом до C++11.   -  person Kerrek SB    schedule 21.11.2018


Ответы (1)


Вы ищете спецификатор decltype, который поддерживается начиная с C++11.

Проверяет объявленный тип сущности или тип и категорию значения выражения.

Вы можете использовать его для объявления того же типа другой переменной,

for(decltype(x) i=0;i<x;i++)

или из возвращаемого типа функции.

unsigned short f();
//...
for(decltype(f()) i=0;i<x;i++)
person songyuanyao    schedule 06.02.2016
comment
О, я слышал об этом раньше, но совершенно забыл об этом и никогда не искал его. Именно то, что я искал, спасибо! Может ли он также получить тип возвращаемого значения из функции? - person Silverlan; 06.02.2016
comment
@Silverlan Вы имеете в виду что-то вроде decltype(f()) x;? да. - person songyuanyao; 06.02.2016