返回

Rust那些事之Rust引用

发布时间:2023-02-04 13:47:09 253
# c++

准备搞起一个《Rust那些事》,一起来学习呀~

Rust引用

1.引用

Rust中,使用​​&T​​​表示类型T的引用类型,跟C++的引用比较来说不太一样,简单理解:等同于​​const T*​​,

Rust版:

pub fn get_rf() {
let mut a : i32 = 1;
let mut b : i32 = 2;
let c : i32 = 3;
let d : &mut i32 = &mut a; // d points to a now
*d = 2; //OK, change a
// d = &mut b; // ILLEGAL, d is not mutable
let mut e : &mut i32;
// e = &a; // illegal d already has a mutable reference to a
e = &mut b;
// e = &mut c; // Illegal, c is not mutable
}

C++版:

void get_rf() {
int a = 1, b = 2;
const int c = 3;
int* const d = &a; // d can't change, but it points to something that can
*d = 2; // OK
//d = &b; // ILLEGAL
int* e; // e can change, as can the thing it points to
// e = &a, legal in c++ since there's no borrow checker
e = &b; // OK, e points to b;
e = &c; // ILLEGAL, c is const
}

例子中**​​&mut​​​称为可变引用**,由于​​&​​​创建出来的引用是只读,所以这里可以用​​&mut​​。

2.解引用

Rust自动解引用:

  • Rust版:
let a = vec![1,2,3];
let b = &a;
let c = &b;
let one = rrv[0];
  • C++版:
const vector a{1, 2, 3};
const vector* const b = &a;
const vector *const * const c = &b;
int one = (**c)[0];

可以看到C++需要手动解。

像遇到​​.​​调用一般自动解引用,诸如:

r.first_name
numbers.sort();

手动解引用:

如果你要给一个引用赋值,必须手动解。

let mut a = 5;
let rra = &mut &mut a;
// rra = 6; // ILLEGAL, must derefence manually
**rra = 6;

最后,建立了一个小群,一起来交流吧~

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
C++那些事之string_view 2023-02-04 13:22:58