首页 > 解决方案 > C++11中的自动类型推导和类型转换有什么区别

问题描述

我对 C++11 中引入的“auto”关键字和类型转换(dynamic_cast/static_cast)这两个概念感到困惑。

C++11 中的“auto”关键字是否在内部使用类型转换?

标签: c++c++11autotypecasting-operator

解决方案


让我们用一个例子来保持简单

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,并让编译器从其初始化程序中推断出它的类型(参见链接)。因此positive将是unsigned short因为它的初始化程序具有该类型。
  • 在第三行中,negative的类型将被推断为short,因为您将sfrom的类型转换unsigned shortshort

请注意,positivenegative变量都将保持相同的值,在十六进制中是0xffff,但由于它们的类型,它们以不同的方式解释。

因此,自动和铸造之间没有区别,就好像它们是可比的,它们是不同的概念。

  • auto将根据某些规则推断类型或您的变量
  • 铸造将改变你的变量的类型

我建议您阅读Scott Meyers 的Effective Modern C++以了解其auto工作原理。


推荐阅读