The Rust Programming Language:Error Handling
Rust 没有异常。相反,它具有可恢复错误的类型 Result<T, E> 和在程序遇到不可恢复错误时停止执行的 panic! 宏。 Unrecoverable Errors with panic!有两种可以触发 panic 的方式:做能让代码触发 panic 的动作(例如数组越界)或显式地调用pan...
编译期计算C++模板是图灵完全的,也就是说使用 C++模板,可以在编译期间模拟一个完整的图灵机,也就是说,可以完成任何的计算任务。当然,从实际的角度,我们并不想也不可能在编译期完成所有的计算,更不用说编译期的编程是很容易让人看不懂的。 这里定义了一个递归的阶乘函数。 那我们怎么知道这个计算是不是在编译期做的...
实例化模板不管是类模版还是函数模板,编译器在看到其定义的时候只能做最基本的语法检查,真正的类型检查要在实例化的时候才能做,一般而言,这也是编译器会报错的时候。模板还可以显式实例化和外部实例化。显式实例化是程序员手动告诉编译器:在某个位置为某个模板生成特定类型的实例。例如: 外部实例化是告诉编译器:这个模板...
The Rust Programming Language:Common Collections
Storing Lists of Values with VectorsCreating a New Vector 这里需要显式写出元素类型,因为里面还没有元素以供类型推断。 这里的整数类型是i32因为它是默认类型。 Updating a Vector Reading Elements of Ve...
The Rust Programming Language:Managing Growing Projects with Packages, Crates and Modules
Packages and Cratescrate 是 Rust 编译器执行代码的最小单位。即使你直接用rustc执行一个源文件,编译器也会认为这个文件是一个 crate。Crates 可以包含模块,并且模块可能会被定义在当前 crate 以外的文件当中。 crate 可以分为两种:binary crate 和 l...
F.20《C++核心指南》的 F.20 这一条款是这么说的:For “out” output values, prefer return values to ouput parameters 调用者负责管理内存,接口负责生成一种常见的做法是,接口的调用者负责分配一个对象所需的内存并负责其生命周期,接口负责生成或修...
The Rust Programming Language:Enums and Pattern Matching
Defining an Enum定义一个枚举: Enum Values可以这样使用枚举值: 这里我们只保存了IP 的类型,没有保存具体的 IP 地址。我们可以用刚学的结构体来实现: 但实际上,我们可以直接把数据存储到每个枚举值当中: 这里可以看到,对于每个枚举值而言,我们相当于也自动...
The Rust Programming Language:Using Structs to Structure Related Data
Defining and Instantiating Structs结构体与元组相似,正如在 “元组类型” 一节中讨论的那样,二者均可保存多个相关的值。与元组一样,结构体的各个部分可以是不同类型的。与元组不同的是,在结构体中你会为每一块数据命名,以清楚地表示这些值的含义。添加这些名称意味着结构体比元组更加灵活:你...
The Rust Programming Language:Understanding Ownership
所有权(Ownership)是Rust最独特的特性,它使Rust能够在不需要垃圾收集器的情况下保证内存安全,因此理解所有权是很重要的。在本章中,我们将会讨论所有权以及相关的几个特性:借用(borrowing),切片(slices),以及Rust如何在内存中分布数据。 What Is Ownership?所有权是一...
The Rust Programming Language:Common Programming Concepts
本章将讲述编程语言中的几乎所有基本概念,并描述它们在Rust中的工作方式。 Variables and Mutability正如之前的章节所说的那样,在Rust中,变量默认是不可变的。这是Rust推荐的一种做法,旨在让你以一种利用Rust提供的安全性和简便开发性的方式编写代码。当一个变量是不可变的,并且绑定了一个...
Page 1 / 7