Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Инструкция decltype
При использовании ключевого слова auto
учитывается только тип. Объявления const
(константа) и ссылки отбрасываются:
const int x = 10;
auto y = x; // Тип int, а не const int
// ++x; // error: increment of read-only variable 'x'
++y; // OK
std::cout << y << std::endl; // 11
Если нужно сохранить объявление const
, то следует воспользоваться инструкцией decltype
, после которой внутри круглых скобок указать переменную или выражение, на основе которых будет определяться тип переменной. Чтобы тип определялся по выражению инициализации, внутри круглых скобок указываем ключевое слово auto
:
const int x = 10;
decltype(auto) y = x; // Тип const int
// ++x; // error: increment of read-only variable 'x'
// ++y; // error: increment of read-only variable 'y'
std::cout << y << std::endl; // 10
decltype(x) z = 20; // Тип const int
// ++z; // error: increment of read-only variable 'z'
std::cout << z << std::endl; // 20
decltype(10L) k = 15; // Тип long int
std::cout << k << std::endl; // 15
Если переменную или выражение внутри круглых скобок дополнительно заключить в круглые скобки, то тип будет ссылочным:
int x = 10;
decltype(x) y = x; // Тип int
++y;
std::cout << x << std::endl; // 10
std::cout << y << std::endl; // 11
x = 20;
decltype((x)) z = x; // Тип int&
++z;
std::cout << x << std::endl; // 21
std::cout << z << std::endl; // 21
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов