Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_rust
提交
e42db618
S
skill_tree_rust
项目概览
CSDN 技术社区
/
skill_tree_rust
通知
32
Star
7
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
2
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
2
Issue
2
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
e42db618
编写于
8月 18, 2022
作者:
J
jackymao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add conversion
上级
8cef2014
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
62 addition
and
1 deletion
+62
-1
data/1.rust初阶/2.rust基本概念/4.类型转换/config.json
data/1.rust初阶/2.rust基本概念/4.类型转换/config.json
+4
-1
data/1.rust初阶/2.rust基本概念/4.类型转换/conversion.json
data/1.rust初阶/2.rust基本概念/4.类型转换/conversion.json
+8
-0
data/1.rust初阶/2.rust基本概念/4.类型转换/conversion.md
data/1.rust初阶/2.rust基本概念/4.类型转换/conversion.md
+50
-0
未找到文件。
data/1.rust初阶/2.rust基本概念/4.类型转换/config.json
浏览文件 @
e42db618
...
@@ -2,7 +2,9 @@
...
@@ -2,7 +2,9 @@
"node_id"
:
"rust-81f36b5f17794dbb973c951ba06e01ea"
,
"node_id"
:
"rust-81f36b5f17794dbb973c951ba06e01ea"
,
"keywords"
:
[],
"keywords"
:
[],
"children"
:
[],
"children"
:
[],
"export"
:
[],
"export"
:
[
"conversion.json"
],
"keywords_must"
:
[],
"keywords_must"
:
[],
"keywords_forbid"
:
[]
"keywords_forbid"
:
[]
}
}
\ No newline at end of file
data/1.rust初阶/2.rust基本概念/4.类型转换/conversion.json
0 → 100644
浏览文件 @
e42db618
{
"type"
:
"code_options"
,
"author"
:
"jackymao_com"
,
"source"
:
"conversion.md"
,
"notebook_enable"
:
false
,
"exercise_id"
:
""
}
\ No newline at end of file
data/1.rust初阶/2.rust基本概念/4.类型转换/conversion.md
0 → 100644
浏览文件 @
e42db618
# 类型转换
Rust 是静态类型语言,就是说,它的变量类型一旦明确之后就是固定的,不会再改变。 (shadowing 另说,因为shadowing 本质上定义了另外一个变量,只不过跟前面那个变量同名)
这导致在 Rust 中,类型的转化没有动态语言那么随心所欲。
Rust 类型转换方式主要有 casting (使用 as 语法), to_string(), From 和 Into (以及 try_from 和 try_into), 再就是手写转换(相当于写一个函数,输入的是一种类型,手工构建另一种类型返回)
问答:下面的代码转出的类型是:
```
rust
fn
main
()
{
let
a
=
42.0_f64
as
f32
as
i32
as
i16
;
use
std
::
cell
::
UnsafeCell
;
let
five
=
&
UnsafeCell
::
new
(
5
)
as
*
const
UnsafeCell
<
i32
>
as
*
const
i32
as
*
mut
i32
;
println!
(
"{}, {}"
,
get_type_name
(
&
a
),
get_type_name
(
&
five
));
}
fn
get_type_name
<
T
:
?
Sized
>
(
_
:
&
T
)
->
&
str
{
std
::
any
::
type_name
::
<
T
>
()
}
```
## 答案
i16,
*
mut i32
## 选项
###
f64, &UnsafeCell
<i64>
###
f32,
*
const UnsafeCell
<i32>
###
i32,
*
const i32
ref:
https://doc.rust-lang.org/std/any/fn.type_name.html
https://doc.rust-lang.org/src/core/cell.rs.html
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录