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

公司网站怎么更新需要怎么做四川住建厅官方网站的网址

公司网站怎么更新需要怎么做,四川住建厅官方网站的网址,app设计论文,网站的排版设计所有权转移#xff0c;Rust中没有垃圾收集器#xff0c;使用所有权规则确保内存安全#xff0c;所有权规则如下#xff1a; 1、每个值在Rust中都有一个被称为其所有者#xff08;owner#xff09;的变量#xff0c;值在任何时候只能有一个所有者。 2、当所有者离开作用域…    所有权转移Rust中没有垃圾收集器使用所有权规则确保内存安全所有权规则如下 1、每个值在Rust中都有一个被称为其所有者owner的变量值在任何时候只能有一个所有者。 2、当所有者离开作用域这个值将被丢弃。 3、所有权的转移时零成本的这里不需要对新的变量开辟一块内存用于存储数据。新变量只是重新分配了资源的所有权。 例子1所有权传递变量 fn main(){let xhello.to_string();//hello的所有者为xlet yx;//hello的所有者变为y这个时候原来的所有者x已失效println!({},x);//} 例子2所有权传递函数 fn create_string() -String {// 创建并返回一个新的StringString::from(Hell,ownership!)}fn transfer_ownership(s:String) - String {//返回输入的String,转移所有权s}fn main() {//create_string函数创建了一个值Hell,ownership!并将所有权传递给了my_string。let my_stringcreate_string(); //my_string将值Hell,ownership!的所有权传递给了函数transfer_ownership函数又将所有权传递给了transferred_stringlet transferred_stringtransfer_ownership(my_string);//此时my_string已不再对值Hell,ownership!拥有所有权。println!(my_string string: {}, my_string); // 此时transferred_string对值Hell,ownership!拥有所有权。println!(Transferred string: {}, transferred_string); } 克隆 1、当克隆一个变量时相当于创建了数据的一个完整副本。 2、与所有权转移相比克隆的成本较大因为涉及到了要内存的使用和数据的复制。 3、所有权转移后原始变量失效克隆之后原始变量仍然有效并且原始变量保留了数据的所有权。这里需要注意克隆后两个变量是完全独立的数据实例。 例子3 fn main(){let xHello.to_string();//x获取了Hello的所有权let yx.clone();//传递x的副本给yclone_ownership(y);//传递x的副本y给函数clone_ownership//x依然对Hello拥有所有权println!(x String:{},x);//y对Hello还拥有所有权吗不再拥有所有权了因为已经将所有权传递给了函数clone_ownership// println!(y String:{},y);}fn clone_ownership(s:String){println!({},s);} 引用 1、引用有可变引用(mut T)和不可变引用(T)。 2、可变引用允许修改引用所指向的值而不可变引用不允许修改引用所指向的值。 3、为了防止数据竞争Rust中在任何时间只能拥有一个可变引用到特定的数据。 4、由于不可变引用不会改变数据Rust中可以拥有任意数量的不可变引用。 例子4 // 定义一个函数它接受一个整数的不可变引用 fn print_int(value:i32) {// 打印出传入整数的值println!(The value is: {},value); }fn main() {let _int11;// 调用函数传入整数的不可变引用print_int(_int); } 例子5 // 定义一个函数它接受一个整数的可变引用 fn print_int(value:mut i32) {// 将整数的值加倍*value *10; }fn main() {let mut _int10;// 调用函数传入整数的可变引用print_int(mut _int);// 打印加倍后的整数值println!(The value is :{},_int); } 5、生命周期参数它可以告诉编辑器参数的引用和返回值的引用都具有相同的生命周期。例子6中的a就是生命周期参数 例子6fn return_referencea(data:a String)-a String{data //返回的引用与输入的引用具有相同的生命周期}fn main(){let external_stringString::from(Hello world);let string_refreturn_reference(external_string);println!({},string_ref);// 这是安全的因为external_string的生命周期贯穿了整个main函数} 例子7//定义一个包含引用的结构体需要生命周期注解struct Itema{//a表示引用的生命周期name:a str,}// 实现结构体战术如何使用生命周期impla Itema{// 创建一个新的Item实例返回一个带有生命周期的实例fn new(name:a str)-Self{Item {name}}}fn main(){let name String::from(Rust Programming);// 创建一个String类型的变量let item Item::new(name);//借用name的引用来创建Item实例println!(Item name:{},item.name);//打印Item中的name字段}//name的生命周期结束item.name的引用也不再有效 例子8fn print_shorter(r:str){println!(The string is:{},r);}fn main(){let long_lived_stringString::from(This is a long-lived string.);{let short_lived_str:strlong_lived_string;//创建一个常生命周期的引用// 下面的函数调用中short_lived_str的生命周期会被强制缩短以匹配print_shorterprint_shorter(short_lived_str);}//short_lived_str的生命周期结束//这里long_lived_string仍然有效因此上面的强制转换是安全的println!({},long_lived_string);} 例子9fn main(){let mut datavec![1,2,3,4,5];//创建一个不可变引用let data_refdata;//打印使用不可变引用的数据println!(Values via immutable reference:{:?},data_ref);// 下面尝试创建一个可变引用将会失败因为data已经被不可变引用借用let data_mut_ref mut data; println!({}, data_mut_ref);// 这行会导致编译错误编译错误如下图//下面尝试创建一个可变引用将不会失败// let data_mut_refmut data;// println!({:?},data_mut_ref);//只有当不可变引用不再使用后才能创建可变引用//这里不再使用不可变引用data_ref因此可以创建可变引用// let data_mut_refmut data;// data_mut_ref.push(6);// println!(Values after mutation:{:?},data_mut_ref);} 从错误截图上看只有使用{:?}编译器错误就不存在了。 例子10:如果有一个或多个不可变引用T那么在同一作用域内不能有可变引用mut T。 如果有一个可变引用mut T,那么在同一作用域内不能有其他的可变引用或不可变引用T。 编译器报错提示如下struct MyStruct{value:i32,}//这个函数尝试同时接受一个对象的可变和不可变引用fn example_fn(mutable_ref:mut MyStruct,immutable_ref:MyStruct){println!(Mutable reference value:{},mutable_ref.value);println!(Immutable reference value:{},immutable_ref);}fn main() {let mut my_objectMyStruct{value:10};//尝试同时借用可变引用和不可变引用example_fn(mut my_object, my_object);} 例子11fn main(){let x10;//定义一个整数变量xlet yx;//创建一个指向x的引用yprintln!(The value of x is:{},x);//直接打印变量x的值。println!(The address of x is:{:p},y);//打印引用y的地址使用{:p}格式化指针地址println!(The value of y is:{},y);//打印应用y的值这里会打印出地址 注意这里打印出来的是10而不是地址不确定是不是Rust版本的问题。println!(The value pointed to by is :{},*y);//使用解引用操作符来打印y指向的值} 例子12// 定义一个包含字符串引用的结构体Bookstruct Booka{//a是一个生命周期注解表示title的生命周期title:a str,}fn main(){let titleString::from(The Rust Programming Language);let bookBook{//title 是一个字符串切片他引用了title变量的数据title:title,};println!(Book title:{},book.title);} 例子13// longset 函数定义了一个生命周期参数a这个生命周期参数制定了输入参数和返回值的生命周期必须相同。fn longseta(x:a str,y:a str)-a str{if x.len()y.len(){x// 如果x的长度大于y返回x}else {y //否则返回y}}fn main(){let string1String::from(Rust);let string2String::from(C);let resultlongset(string1.as_str(), string2.as_str());//longset函数比较两个字符串切片的长度println!(The longeset string is {},result);//注意 result 的生命周期与string1和string2的生命周期相关因此它们必须在result被使用之前保持有效} 例子14// 定义一个结构体ImportantExcerpt它包含一个字符串切片字段partstruct ImportantExcerpta{part:a str,}fn main(){let novelString::from(Call me ishmael. Some years ago ...);let first_sentencenovel.split(.).next().expect(Could not find a .);let excerptImportantExcerpt{part:first_sentence,};//打印出结构体中的字符串切片println!(Important excerpt:{},excerpt.part);} 例子15// 定义一个结构体ImportantExcerpt它包含一个字符串切片字段partstruct ImportantExcerpta {part:a str,}//为ImportantExcept结构体实现方法impl a ImportantExcerpta {fn announce_and_return_part(self,announcement:str)-str{println!(Attention please:{},announcement);self.part}}fn main(){let novelString::from(Call me ishmael. Some years ago ...);let first_sentencenovel.split(.).next().expect(Could not find a .);let excerptImportantExcerpt{part:first_sentence,};let announcementIm going to tell you something important!;let partexcerpt.announce_and_return_part(announcement);//打印出结构体中的字符串切片println!(Important excerpt:{},part); } 例子16//定义一个拥有静态生命周期的字符串常量static MESSAGE:static strHello,this is a static lifetime example;fn main(){//打印这个静态生命周期的字符串println!({},MESSAGE);} 例子17//定义一个函数该函数接收两个引用参数一个是不带生命周期的引用另一个是带生命周期的a的引用fn selecta(first:i32,second:a i32)-a i32{//这里我们简单地返回第二个参数它带有生命周期asecond}fn main(){let num110;let num220;//创建一个生命周期较长的引用let result;{let num3num2;//调用函数num1的引用不带生命周期num3的引用带有生命周期resultselect(num1, num3);}//num3的生命周期结束//打印结果result引用的是num2因为它与num3共享相同的数据println!(The selected number is {},result);} 例子18//定义一个结构体Book包含一个字符串切片引用代码书名struct Booka{name:a str,}//实现Book结构体的一个方法get_name返回书名的引用//这里没有显示标注生命周期因为编译器会自动应用生命周期省略规则impla Booka{//根据省略规则这里的返回值生命周期被自动推导问为与self相同fn get_name(self)-str{self.name} }fn main(){let bookBook{name:The Rust Programming Language};//调用get_name方法打印返回的书名引用println!(Book name:{},book.get_name());} 例子19 // 定义一个泛型函数slice_first它有一个泛型类型T和生命周期a fn slice_firsta, T(data: a [T]) - Optiona T {// 使用.get()方法来尝试获取slice的第一个元素的引用// 如果存在则返回Some(T)否则返回Nonedata.get(0) }fn main() {// 创建一个整数类型的slicelet numbers vec![1, 2, 3, 4, 5];// 调用slice_first函数并打印返回的结果if let Some(first) slice_first(numbers) {println!(The first number is {}, first);} else {println!(The slice is empty.);}// 创建一个字符类型的slicelet letters vec![a, b, c, d, e];// 同样调用slice_first函数并打印返回的结果if let Some(first) slice_first(letters) {println!(The first letter is {}, first);} else {println!(The slice is empty.);} }
http://www.pierceye.com/news/217864/

相关文章:

  • 手机网站如何制作免费网站的内容和功能
  • 宁波网站推广合作商品牌设计包括
  • 辽宁省建设厅官方网站制作一个静态网站的步骤
  • 营销外贸网站建设北京房地产网站建设
  • 青海网站建设公司代理记账如何获取客户
  • 做视频必须知道的一些网站企业搜索
  • 网站定制开发北京淮南网新闻最新消息
  • 网站描述怎么写比较好企业信息系统案例
  • 青峰集团响应式网站功能性的网站归档系统
  • 龙岩招聘求职网站有哪些网站建设促销活动
  • 人力资源服务外包网站tdk优化文档
  • 做黑网站吗江苏建筑业网
  • 地区门户网站 wap appcdn接入wordpress出错
  • 网站建设为什么学flash最新新闻消息事件
  • 高端网站建设需要的人员配备编辑目录中的字体 wordpress
  • 电脑维修网站模板金融商城快捷申请网站模板下载
  • wordpress 本地建站教程化纤公司网站建设
  • 广州网站设计公司新闻给客户做非法网站
  • 微商城手机网站制作公司痞子 wordpress
  • 公司网站备案申请鹤山做网站
  • 南阳那里有做网站的聊城网站优化
  • 网站开发技术实验教程长沙网站托管公司排名
  • 美妆网站建设项目计划书软件开发培训班机构
  • 小视频网站怎么做seo网络优化师
  • 建个门户网站新手学编程用什么软件
  • 旅游网站建设规范wordpress用户注册协议
  • 淘宝客网站女装模板下载wordpress5 没有块引用
  • 35网站建设博客移动端网站模板
  • 卡盟网站建设公司品牌策划ppt
  • 自己如何做网站教程广州建网站有哪些