当前位置: 首页 > news >正文

射阳县住房和城乡建设局网站怎么制作单页网站

射阳县住房和城乡建设局网站,怎么制作单页网站,网页设计尺寸竖版,工程网站模板制作教程类型转换casting-between-types.mdcommit 6ba952020fbc91bad64be1ea0650bfba52e6aab4Rust#xff0c;和它对安全的关注#xff0c;提供了两种不同的在不同类型间转换的方式。第一个#xff0c;as#xff0c;用于安全转换。相反#xff0c;transmute允许任意的转换#xf…类型转换casting-between-types.mdcommit 6ba952020fbc91bad64be1ea0650bfba52e6aab4Rust和它对安全的关注提供了两种不同的在不同类型间转换的方式。第一个as用于安全转换。相反transmute允许任意的转换而这是 Rust 中最危险的功能之一强制转换(Coercion)类型间的强制转换是隐式的并没有自己的语法不过可以写作as。强转出现在letconst和static语句函数调用参数结构体初始化的字符值和函数返回值中。最常用的强转的例子是从引用中去掉可变性mut T到T一个相似的转换时去掉一个[裸指针](Raw Pointers 裸指针.md)的可变性*mut T到*const T引用也能被强转为裸指针T到*const Tmut T到*mut T自定义强转可以用[Deref](Deref coercions Deref强制多态.md)定义。强转是可传递的。asas关键字进行安全的转换let x: i32 5;let y x as i64;有三种形式的安全转换显式转换数字类型之间的转换和指针转换。转换并不是可传递的即便是e as U1 as U2是一个有效的表达式e as U2也不必要是(事实上只有在U1强转为U2时才有效)。显式转换(Explicit coercions)e as U是有效的仅当e是T类型而且T能强转为U。数值转换e as U的转换在如下情况下也是有效的e是T类型而且T和U是任意数值类型numeric-caste是一个类 C 语言枚举(变量并没有附加值)而且U是一个整型enum-caste是bool或char而且T是一个整型prim-int-caste是u8而且U是charu8-char-cast例如let one true as u8;let at_sign 64 as char;let two_hundred -56i8 as u8;数值转换的语义是两个相同大小的整型之间(例如i32-u32)的转换是一个no-op从一个大的整型转换为一个小的整型(例如u32-u8)会截断从一个小的整型转换为一个大的整型(例如u8-u32)会如果源类型是无符号的会补零(zero-extend)如果源类型是有符号的会符号(sign-extend)从一个整型转换为一个浮点会产生整型的浮点表示如有必要会舍入(未指定舍入策略)从 f32 转换为 f64 是完美无缺的指针转换你也许会惊讶[裸指针](Raw Pointers 裸指针.md)与整型之间的转换是安全的而且不同类型的指针之间的转换遵循一些限制。只有解引用指针是不安全的let a 300 as *const char; // a pointer to location 300let b a as u32;e as U在如下情况是一个有效的指针转换e是*T类型U是*U_0类型且要么U_0: Sized要么unsize_kind(T) unsize_kind(U_0)ptr-ptr-caste是*T类型且U是数值类型同时T: Sizedptr-addr-caste是一个整型且U是*U_0类型同时U_0: Sizedaddr-ptr-caste是[T; n]类型且U是*const T类型array-ptr-caste是函数指针且U是*T类型同时T: Sizedfptr-ptr-caste是函数指针且U是一个整型fptr-addr-casttransmuteas只允许安全的转换并会拒绝例如尝试将 4 个字节转换为一个u32let a [0u8, 0u8, 0u8, 0u8];let b a as u32; // four eights makes 32这个错误为error: non-scalar cast: [u8; 4] as u32let b a as u32; // four eights makes 32^~~~~~~~这是一个“非标量转换(non-scalar cast)”因为这里我们有多个值四个元素的数组。这种类型的转换是非常危险的因为他们假设多种底层结构的实现方式。为此我们需要一些更危险的东西。transmute函数由[编译器固有功能](Intrinsics 固有功能.md)提供它做的工作非常简单不过非常可怕。它告诉Rust对待一个类型的值就像它是另一个类型一样。它这样做并不管类型检查系统并完全信任你。在我们之前的例子中我们知道一个有4个u8的数组可以正常代表一个u32并且我们想要进行转换。使用transmute而不是asRust允许我们use std::mem;unsafe {let a [0u8, 0u8, 0u8, 0u8];let b mem::transmute::(a);}为了使它编译通过我们要把这些操作封装到一个unsafe块中。技术上讲只有mem::transmute调用自身需要位于块中不过在这个情况下包含所有相关的内容是有好处的这样你就知道该看哪了。在这例子中a的细节也是重要的所以它们放到了块中。你会看到各种风格的代码有时上下文离得太远因此在unsafe中包含所有的代码并不是一个好主意。虽然transmute做了非常少的检查至少它确保了这些类型是相同大小的这个错误use std::mem;unsafe {let a [0u8, 0u8, 0u8, 0u8];let b mem::transmute::(a);}和error: transmute called with differently sized types: [u8; 4] (32 bits) to u64(64 bits)除了这些你可以自行随意转换只能帮你这么多了
http://www.pierceye.com/news/322888/

相关文章:

  • 潍坊网站开发高手重庆市设计院
  • 微信公众号平台网站开发WordPress破解分享
  • 东营网站建设服务商低价备案域名购买
  • 高校网站建设自查报告哪个外贸网站开发客户比较好用
  • 网站做付费推广都需要问什么wordpress小工具插件
  • 网站的建设技术有哪些北京一环都是住什么人
  • 做外贸soho网站的公司吗已有备案号新增网站备案要关闭原先的站点吗
  • 网站域名注册免费wordpress 让导航悬浮
  • 全景旅游网站项目建设湖南建筑公司网站
  • 做网批那个网站好免费视频素材库app
  • cms建站模板appseo网络优化是什么工作
  • 云落wordpress优化大师在哪里
  • 威海网站建设公司手机网站做落地页
  • 海宁建设局网站三网合一 网站建设
  • 1688货源网官方网站网站怎么做背景
  • 做阿里还是网站中小企业为什么要建设网站
  • 天津的网站建设做网站费用怎么入账
  • 网站原型是产品经理做wordpress手机上用的
  • 专业网站排名优化重庆广告公司电话
  • 在线免费看影视网站正规企业展厅设计公司
  • 励志网站织梦源码做电子杂志用什么网站
  • 电子设计网站wordpress数据清除
  • 义乌网站推广中国住房和城乡建设厅网站
  • 濮阳seo网站建设商贸公司寮步网站建设
  • 百姓网网站建设如何在社交网站做销售
  • 网站微信认证费用介绍网络营销的短文
  • 北京微网站修改wordpress后台登陆
  • 网站建设管理工作情况报告企业在线
  • ps临摹网站营销型网站传统网站
  • 对电子商务网站建设和管理的理解学网站开发应该学什么软件