引用

四种引用类型各自能绑定的值类别

注意避免发生悬垂引用

避免间接引用临时对象,这样不会再有延长生命周期的作用,导致引用悬垂

临时对象的声明周期到所在整个表达式的结尾,如果有初始化器,会存活到初始化器结束

T&& ref = std::move(T{})
result&& s1 = std::move(process(1));

move的形参是引用,返回的临时对象绑定到move的形参上,生命周期与该引用一样长

#include <iostream>
 
const int& returnByConstReference()
{
    return 5; // returns const reference to temporary object
}
 
int main()
{
    const int& ref { returnByConstReference() };
 
    std::cout << ref; // undefined behavior
 
    return 0;
}

按值接受以下代码中的case2是可以的,但是按值接受上述代码仍然是错的

按引用返回的对象的必须在函数返回后依然存活

#include <iostream>
 
const int& returnByConstReference(const int& ref)
{
    return ref;
}
 
int main()
{
    // case 1: direct binding
    const int& ref1 { 5 }; // extends lifetime
    std::cout << ref1 << '\n'; // okay
 
    // case 2: indirect binding
    const int& ref2 { returnByConstReference(5) }; // binds to dangling reference
    std::cout << ref2 << '\n'; // undefined behavior
 
    return 0;
}

返回引用时,如果直接将作为引用传入的参数返回一般是ok的

hard drive

sector-addressable

sector是硬件的概念

partition

分区

a range of sectors

将一个物理磁盘划分为多个逻辑部分的过程,每个分区可以独立管理和使用

block

一般有至少1个sector大

文件系统管理存储的逻辑单元