emacs 中 C++ 缩进的设置

本文是 cc-mode 缩进的设置,所有继承自 cc-modemajor mode 都可以参考,如 c++

缩进的设置主要是两个方面的设置:

  1. tab 的设置
  2. 代码中各个地方的缩进设置

tab 设置

tab 的设置主要是两方面:

Elasticsearch 的简单使用

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。

ES 介绍

玩“飞花令”游戏时,让游戏参与者说出带“月”字的诗句,我们可以去百度输入“带月字的古诗”,百度就会返回相关的信息。

Rust 中的 RAII 模式

一个送信的逻辑:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#[derive(Clone)]
pub struct Letter {
    text: String,
}

pub struct Envelope {
    letter: Option<Letter>,
}

pub struct PickupLorryHandle {
    done: bool,
}

impl Letter {
    pub fn new(text: String) -> Self {
        Letter { text: text }
    }
}

impl Envelope {
    pub fn wrap(&mut self, letter: &Letter) {
        self.letter = Some(letter.clone());
    }
}

pub fn buy_prestamped_envelope() -> Envelope {
    Envelope { letter: None }
}

impl PickupLorryHandle {
    pub fn pickup(&mut self, _envelope: &Envelope) {
        // give letter
    }

    pub fn done(&mut self) {
        self.done = true;
        println!("sent");
    }
}

pub fn order_pickup() -> PickupLorryHandle {
    PickupLorryHandle { done: false }
}

fn main() {
    let letter = Letter::new(String::from("Dear RustFest"));
    let mut envelope = buy_prestamped_envelope();
    envelope.wrap(&letter);
    let mut lorry = order_pickup();
    lorry.pickup(&envelope);
    lorry.done();
}
1
sent

上面存在的问题:

Rust 中的 trait 系统

trait 是 Rust 的灵魂,Rust 中的所有抽象,如接口抽象,OOP 范式抽象,函数式范式抽象,都是基于 trait 完成的。

trait 是在行为上对类型的约束,这种约束让 trait 有如下四种用法:

Rust 中的析构顺序

一般来讲,变量的析构顺序和声明顺序相反,但是并不是所有的情况都是这样。

本地变量

本地变量先声明后析构。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
struct PrintDrop(&'static str);
impl Drop for PrintDrop {
    fn drop(&mut self) {
        println!("Dropping {}", self.0)
    }
}

fn main() {
    let _x = PrintDrop("x");
    let _y = PrintDrop("y");
}
1
2
Dropping y
Dropping x

元组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
struct PrintDrop(&'static str);
impl Drop for PrintDrop {
    fn drop(&mut self) {
        println!("Dropping {}", self.0)
    }
}

fn main() {
    let _tup1 = (PrintDrop("x"), PrintDrop("y"));
    let _tup2 = (PrintDrop("s"), PrintDrop("z"));
}
1
2
3
4
Dropping s
Dropping z
Dropping x
Dropping y

先析构 tup2 ,后析构 tup1 ,在元组内部是前面的先析构,后面的后析构。