引用
四种引用类型各自能绑定的值类别
注意避免发生悬垂引用
避免间接引用临时对象,这样不会再有延长生命周期的作用,导致引用悬垂
临时对象的声明周期到所在整个表达式的结尾,如果有初始化器,会存活到初始化器结束
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大
文件系统管理存储的逻辑单元