c++ - C++11中的自动类型推导和类型转换有什么区别
问题描述
我对 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
from的类型转换unsigned short
为short
。
请注意,positive
和negative
变量都将保持相同的值,在十六进制中是0xffff
,但由于它们的类型,它们以不同的方式解释。
因此,自动和铸造之间没有区别,就好像它们是可比的,它们是不同的概念。
auto
将根据某些规则推断类型或您的变量- 铸造将改变你的变量的类型
我建议您阅读Scott Meyers 的Effective Modern C++以了解其auto
工作原理。
推荐阅读
- java - 如何计算需要覆盖字符串的选项卡数
- sql - 电子商务结帐:何时何地在关系数据库中为购物车中的商品创建中间和最终订单
- javascript - 如何使页面的特定部分居中,使其与平滑滚动完美结合?
- c# - 使用 C# 创建文件
- reactjs - 我可以将 ref 存储在 Redux 存储中,还是被认为是不好的做法?
- mysql - 构建动态 SQL 查询以对有限制的记录进行排序
- php - 使用 ajax 和 jquery 的简单食物跟踪器
- javascript - 键“local_part”的重复条目“0-0”
- javascript - Codeceptjs 无法在不使用元素的情况下滚动/向下滑动
- python - 无法从 angel.co 网站抓取所有数据