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

网站建设服务面试题哪些网站可以免费做产品推广

网站建设服务面试题,哪些网站可以免费做产品推广,东莞市工商注册登记官网,如何做网站推广自己产品一、智能指针是什么 指针是一个存储内存地址的变量。这个地址指向一些其他数据。 智能指针是一类数据结构#xff0c;它们类似指针#xff0c;但是拥有额外的功能。智能指针的概念起源于C。Rust标准库提供了许多智能指针#xff0c;比如String和VecT#xff0c;虽…一、智能指针是什么 指针是一个存储内存地址的变量。这个地址指向一些其他数据。 智能指针是一类数据结构它们类似指针但是拥有额外的功能。智能指针的概念起源于C。Rust标准库提供了许多智能指针比如String和VecT虽然我们并不这么称呼它们但这些类型都属于智能指针。 智能指针通常使用结构体实现。智能指针与常规结构体的区别在于智能指针实现了Deref和Drop trait。Deref trait使智能指针表现的像引用一样这样就可以编写既用于引用、又用于智能指针的代码。Drop trait允许我们自定义智能指针离开作用域时的行为。 在Rust中引用和智能指针的一个区别是引用是一类只借用数据的指针智能指针则拥有数据的所有权。 二、最常用的一些智能指针 1.BoxT用于在堆上分配 2.RcT一个引用计数类型其数据可以有多个所有者 3.RefT 和RefMutT通过RefCellT 访问RefCellT是一个在运行时而不是在编译时执行借用规则的类型 一Box指针 BoxT类型是一个智能指针因为它实现了Deref trait和Drop trait。 box把值放在堆上而不是栈上。留在栈上的则是指向堆数据的指针。除了数据被储存在堆上而不是栈上之外box没有性能损失。不过也没有很多额外的功能。 1.创建Box 使用new函数创建 例子 fn main() {let var_i32 5; // 默认数据保存在 栈 上let b Box::new(var_i32); // 使用Box后数据会存储在堆上println!(b {}, b); }b离开作用域时它将自动释放。这个释放包括b本身位于栈上和它所指向的数据位于堆上。 2.使用box 像使用引用一样使用box。 使用解引用操作符 * 解引用box fn main() {let x 5; // 值类型数据let y Box::new(x); // y是一个智能指针指向堆上存储的数据5println!({},5x);println!({},5*y); // 为了访问y存储的具体数据需要解引用 } 编译运行结果如下 true true 直接使用 5 y 会返回false3.使用Box创建递归类型 Rust需要在编译时知道类型占用多少空间。一种无法在编译时知道大小的类型是递归类型其值的一部分可以是自身类型的另一个值。这种嵌套可以是无限的所以Rust不知道递归类型需要多少空间。不过box有一个已知的大小所以通过在递归类型定义中插入box就可以创建递归类型了。一个常见递归类型就是链表。 实例 enum List {Cons(i32, List),Nil, } use crate::List::{Cons, Nil}; fn main() {let list Cons(1, Cons(2, Cons(3, Nil)));//使用这个list来储存1, 2, 3 }第一个Cons储存1和另一个List值。这个List是一个Cons值此cons储存2和下一个List值。这个list又是一个cons储存3和值为Nil的List。这段代码编译错误。因为这个类型 “有无限的大小”。 因为BoxT 是一个指针它的大小是确定的所以将Box作为Cons的成员这样List的大小就确定了。 enum List {Cons(i32, BoxList),Nil, } use crate::List::{Cons, Nil}; fn main() {let list Cons(1,Box::new(Cons(2,Box::new(Cons(3,Box::new(Nil)))))); }三、两个特性 一Deref Trait 1.Deref是由Rust标准库提供的一个特性。 实现Deref之后就能把智能指针当作引用使用相当于重载解引用运算符*。 Deref中包含deref()方法。 deref()方法用于引用self实例并返回一个指向内部数据的指针。 例子 use std::ops::Deref; struct DerefExampleT {value: T } implT Deref for DerefExampleT {type Target T;fn deref(self) - Self::Target {self.value} } let x DerefExample { value: a }; assert_eq!(a, *x);范例 use std::ops::Deref; struct MyBoxT(T); implT MyBoxT {fn new(x:T)- MyBoxT {MyBox(x)} } implT Deref for MyBoxT {type Target T;fn deref(self) - T {self.0} } fn main() {let x 5;let y MyBox::new(x); // 调用new() 返回创建一个结构体实例println!(5x is {},5x);println!(5*y is {},5*y); // 解引用yprintln!(x*y is {},x*y); // 解引用y } 编译运行结果如下 5x is true 5*y is true x*y is true每次使用 * 时 * 运算符都被替换成先调用deref方法再使用 * 解引用的操作且只会发生一次不会无限递归替换 * 操作符解引用出i32类型的值就停止了 2.DerefMut trait用于重载可变引用的 * 运算符 3.Deref隐式转换 Deref隐式转换将实现了Deref的类型的引用转换为另一种类型的引用。例如将String转换为str因为String实现了Deref因此可以返回str。Deref强制转换是Rust在函数或方法传参上的一种便利操作并且只能作用于实现了Deref的类型。当这种特定类型的引用作为实参传递给和形参类型不同的函数时将自动转换类型。这时会有一系列的deref方法被调用把我们提供的类型转换成了形参所需的类型。 Deref隐式转换使Rust程序员在调用函数时无需使用过多 和 *。这个功能方便我们编写同时作用于引用或智能指针的代码。 实例 //还是上面的MyBoxT fn hello(name: str) {println!(Hello, {name}!); } let m MyBox::new(String::from(Rust)); hello(m);因为Deref隐式转换使用MyBoxString的引用作为参数是可行的。 因为MyBoxT实现了DerefRust可以通过deref将MyBoxString变为String。而String也实现了DerefRust再次调用deref将String变为str这就符合hello函数的定义了。 如果没有Deref强制转换要把MyBoxString类型的值传给hello函数则不得不编写如下代码 let m MyBox::new(String::from(Rust)); hello((*m)[..]);(*m)将MyBoxString解引用为String接着和[..]将String转换成str。 没有Deref强制转换的话所有这些符号混在一起将难以读写和理解。Deref强制转换会自动执行这些转换。这些转换发生在编译时所以没有运行时损耗 Deref隐式转换有三种情形 1当T实现Deref TargetU 时从 T到 U。 2当T实现DerefMut TargetU 时从 mut T到 mut U。 3当T实现Deref TargetU 时从 mut T到 U。 第一种情况表明如果有一个 T而T实现了返回U类型的Deref则可以直接得到 U。 第二种情况表明可变引用也有着相同的行为。 第三个情况将可变引用强转为不可变引用。但是反过来是不行的不可变引用永远也不能强转为可变引用。 这三种情况下T类型都自动实现了U类型的所有方法。 二Drop Trait Rust中的析构函数是由Drop trait提供的drop()方法。 Drop Trait只有一个方法drop() 。 实现了Drop特质的结构体在离开了它的作用域时会调用drop()方法。 例子 use std::ops::Deref; struct MyBoxT(T); implT MyBoxT {fn new(x:T)-MyBoxT{MyBox(x)} } implT Deref for MyBoxT {type Target T;fn deref(self) - T {self.0} } implT Drop for MyBoxT{fn drop(mut self){println!(dropping MyBox object from memory );} } fn main() {let x 50;MyBox::new(x);MyBox::new(Hello); } 编译运行结果如下 dropping MyBox object from memory dropping MyBox object from memory
http://wiki.neutronadmin.com/news/7652/

相关文章:

  • iis2008如何做网站呼市做网站建设的公司哪家好
  • 做动图的网站制作网站参考案例
  • 著名设计师网站软件开发 报价单
  • 公司注销了网站备案的负责人河南网站建设制作
  • 网站推广活动wordpress免费模板带演示数据库
  • 文登南海建设局网站长沙科技公司排名
  • 厦门市规划建设局网站一个做微信文章的网站
  • 福田区住房和建设局官方网站人力资源三网站建设
  • 福州网站制作网站网站建设项目登记表
  • 北京建设部官方网站证书查询微信上做网站编辑
  • 扫二维码做自己网站免费游戏网站模板
  • 经营性商务网站建设需要备案吗永康网站开发
  • 建设网站建设什么征琴小女孩做网站
  • 执法局网站建设目的宣传软文是什么意思
  • 免费发广告的软件网站建设以及seo
  • 园林建设网站建设工程人力资源官网
  • 汕头网站制作哪家强广州最新发布消息
  • dedecms wap网站模板下载简单美食网站模板
  • 网站配色方案上市公司网站的作用
  • 公司网站建设和百度推广流程图温州门户网站
  • 网站模板哪家好做网站怎么不被找到
  • 做网站播放未上映的电影做网站公司q房网
  • 如何推广自己的外贸网站电子商务专业是干什么的
  • 设计logo网站赚钱医疗门户网站管理系统
  • 哈尔滨市建筑企业管理站wordpress怎么用外链
  • 龙岗企业网站设计公司.net网站服务器
  • 企业网站案列湖南3合1网站建设电话
  • 公司培训网站建设寿光企业建站流程
  • 福州免费自助建站模板如何让产品吸引顾客
  • 标识标牌网站怎么做wordpress做第二个