C++11 中的自动类型推导和类型转换有什么区别
What is the difference between Automatic type deduction in C++11 and type casting
我对 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 short
转换为[=17] =].
请注意,positive
和 negative
变量将保持相同的值,十六进制为 0xffff
,但由于它们的类型不同,它们的解释方式不同。
所以auto和casting之间并没有什么区别,就好像它们是可比的,它们是不同的概念。
auto
会根据一定的规则推导出类型或者你的变量
- 转换会改变变量的类型
我建议您阅读 Scott Meyers 的 Effective Modern C++ 以了解 auto
的工作原理。
我对 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 short
转换为[=17] =].
请注意,positive
和 negative
变量将保持相同的值,十六进制为 0xffff
,但由于它们的类型不同,它们的解释方式不同。
所以auto和casting之间并没有什么区别,就好像它们是可比的,它们是不同的概念。
auto
会根据一定的规则推导出类型或者你的变量- 转换会改变变量的类型
我建议您阅读 Scott Meyers 的 Effective Modern C++ 以了解 auto
的工作原理。