Давайте сделаем это проще на примере
unsigned short s = 65535;
auto positive = s;
auto negative = (short) s;
std::cout << positive << std::endl; // prints 65535
std::cout << negative << std::endl; // prints -1
В этом коде:
- В первой строке вы просто инициализируете переменную
unsigned short
значением 655355
- Во второй строке вы инициализируете переменную
positive
, и вы позволяете компилятору определить ее тип из инициализатора (см. link ).Поэтому positive
будет unsigned short
, потому что его инициализатор имеет этот тип. - В третьей строке тип
negative
будет выведен как short
, потому что вы приводите тип s
от unsigned short
до short
.
Обратите внимание, что переменные positive
и negative
будут содержать одно и то же значение, которое в шестнадцатеричном виде равно 0xffff
, но они интерпретируются по-разномупути из-за их типов.
Так что нет такой разницы между авто и кастом, как если бы они были сопоставимы, это разные понятия.
auto
выведет тип или вашу переменную на основе определенных правил - приведение изменит тип вашей переменной
Я рекомендую вамПрочтите Скотта Мейерса Effective Modern C ++ , чтобы узнать, как работает auto
.