我总是不确定,在C++中,restrict关键字是什么意思?
是否意味着赋予函数的两个或更多指针不重叠?还有什么意思?
Rust标准库中有几种包装类型:
std::cell模块中的单元格:Cell和RefCellRc和Arc.std::sync模块中的类型:Mutex或者AtomicBool例如据我了解,这些是包装器,提供了比简单参考更多的可能性.虽然我理解一些基础知识,但我看不到整体情况.
他们到底做了什么?细胞和参考计数家族是否提供正交或类似的特征?
这是我在Rust文档中看到的两个函数签名:
fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo }
fn modify_foo(foo: &mut i32) { *foo += 1; *foo }
Run Code Online (Sandbox Code Playgroud)
为什么不同的位置mut?
似乎第一个函数也可以声明为
fn modify_foo(foo: mut Box<i32>) { /* ... */ }
Run Code Online (Sandbox Code Playgroud) 据我了解,可变性并未反映在变量类型签名中。例如,这两个引用具有相同的类型签名&i32:
let ref_foo : &i32 = &foo;
let mut ref_bar : &i32 = &bar;
Run Code Online (Sandbox Code Playgroud)
为什么会这样?这似乎是一个非常重大的疏忽。我的意思是,即使是 C/C++ 也更const明确地做到了这一点,有两个来表示我们有一个const指向const数据的指针:
const int * const ptr_foo = &foo;
const int * ptr_bar = &bar;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来思考这个问题?