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

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

我对 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让编译器从其初始化器中推导出其类型(参见link)。因此 positive 将是 unsigned short 因为它的初始值设定项具有该类型。
  • 在第三行中,negative 的类型将被推断为short,因为您正在从 中转换s 的类型>unsigned shortshort

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

所以 auto 和 casting 之间并没有什么区别,就好像它们是可比的,它们是不同的概念。

  • auto 将根据特定规则推断类型或您的变量
  • 强制转换会改变变量的类型

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

关于c++ - C++11 中的自动类型推导和类型转换有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50508797/

相关文章:

c++在递归中通过引用传递

c++ - 有没有办法记住(存储)decltype 的返回类型?

c++14 static constexpr auto 与 odr 用法

c++ - 为什么自动说明符从 &pointer 推断出 "top and low"级别常量?

Java JNI UnsatisfiedLinkError

c++ - 设置 MP3 编码器 mft 输出类型失败

c++ - 过程硬件编程的错误处理技术

c++ - 用于 mingw 的 msi.h

c - 如何将 3x3 的卷积核与图像相乘

c++ - 理解 C++11 中的 std::atomic::compare_exchange_weak()