假设我有以下片段(操场)
struct A {
pub val: u32
}
const GLOBAL_A: A = A {val: 2};
fn main() {
let some_a: A = GLOBAL_A;
let other_a: A = GLOBAL_A;
println!("double val = {}", some_a.val + other_a.val);
}
Run Code Online (Sandbox Code Playgroud)
由于A既不是 也不Clone是Copy,我认为 的值GLOBAL_A会被移动。这对于 const 没有多大意义,并且如图所示无论如何都不会是这种情况,因为它可以“移动”两次。
什么是允许的规则上面的代码工作考虑A是不是Clone也没有Copy?
我正在尝试找出 C(11) 中的最佳实践。因为没有命名空间,我可以想到两种避免名称冲突的方法:
a.) 函数前缀
void kernel_init(void) { ... }
int kernel_start(void* foo) { ... }
Run Code Online (Sandbox Code Playgroud)
b.) “函数结构”
struct kernel {
void (*init)(void);
int (*start)(void* foo);
} kernel;
Run Code Online (Sandbox Code Playgroud)
我不是在问哪种方法更漂亮,因为那是相当主观的。我要问的是,除了代码风格之外,这两种方法有什么明显的缺点吗?这包括一开始不相关但随着代码库增长而成为更大问题的小事情。