C ++ 11中的自动类型推导和类型转换有什么区别

时间:2018-05-24 11:56:41

标签: c++ c++11 auto typecasting-operator

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

" auto" C ++ 11中的关键字在内部使用类型转换?

1 个答案:

答案 0 :(得分:1)

让我们使用示例

保持简单
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

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

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

  • auto会根据某些规则推断出类型或变量
  • cast会改变变量的类型

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