В чем разница между автоматическим удержанием типов в C ++ 11 и приведением типов - PullRequest
0 голосов
/ 24 мая 2018

Я запутался между двумя понятиями: ключевое слово "auto", введенное в C ++ 11, и приведение типов (dynamic_cast / static_cast).

Использует ли ключевое слово "auto" в C ++ 11Тип литья внутри?

1 Ответ

0 голосов
/ 25 мая 2018

Давайте сделаем это проще на примере

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.

...