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

What is the difference between Automatic type deduction in C++11 and type casting

本文关键字:类型转换 什么 区别 类型 C++11      更新时间:2023-10-16

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

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

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

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,因为你正在将s的类型从unsigned short转换为short

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

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

  • auto将根据某些规则推断类型或变量
  • 强制转换将更改变量的类型

我建议您阅读斯科特·迈耶斯(Scott Meyers(的《有效的现代C++》,以了解auto的工作原理。