c++ - (C++) 这3种类型转换方法有什么区别?
问题描述
当我在 char 类型变量上使用它时,以下任何一种方法都会给我相同的值。那么它们之间有什么区别呢?
(int)c
int{c}
static_cast<int>(c)
解决方案
对于使用 eth 功能转换符号的初学者,需要一个简单的类型说明符。
那就是你可能不会写
unsigned int( c )
转换的功能符号创建一个临时对象。
在使用显式类型转换时,您可以创建例如左值引用。
这是一个演示程序。
#include <iostream>
int main()
{
char c = 'A';
++( char &)c;
std::cout << "c = " << c << '\n';
}
来自 C++ 标准(5.2.3 显式类型转换(函数表示法)
3 类似地,一个 simple-type-specifier 或 typename-specifier 后跟一个 braced-init-list 使用指定的 braced-init-list 创建一个指定类型 direct-list-initialized (8.5.4) 的临时对象,并且它的value 是作为prvalue的临时对象。
至于static_cast
那么符合 C++ 标准(5.2.9 静态转换)
1 表达式 static_cast(v) 的结果是将表达式 v 转换为类型 T 的结果。如果 T 是左值引用类型或函数类型的右值引用,则结果是左值;如果 T 是对对象类型的右值引用,则结果是 xvalue;否则,结果为纯右值。static_cast 运算符不应抛弃常量
推荐阅读
- javascript - 如何记录合并父记录及其所有子记录
- html - 一个组件的Angular 2+多个HTML模板
- sql - 使用 select 语句将数据更新到表中
- r - 仅删除数字内的逗号
- angular - 从 Angular 库中加载一个模块而不是加载整个库
- python - 使用 cx_Freeze 时出现问题:“无法导入名称 'tf2'”
- javascript - 如何在 ios chrome 浏览器上动态重置捏缩放?
- javascript - IF 进入 GoogleScript 中关于提取电子邮件的循环
- neo4j - 在foreach中合并和删除case语句
- ios - 从 App Store 上的应用程序中删除核心数据支持