Skip to content

Latest commit

 

History

History
27 lines (18 loc) · 846 Bytes

File metadata and controls

27 lines (18 loc) · 846 Bytes

条款06:当auto推导的类型不符合要求时,使用带显式类型的初始化器习惯用法

std::vector<bool>operator[] 返回的类型并不是bool类型,而是一个std::vector<bool>::reference 的代理类对象。一种实现方式是记录首地址和偏移量。

C++禁止比特的引用,所以不能返回 bool&std::vector<bool>::reference 做了一个向bool类型的隐式类型转换。

使用如下语句时:

std::vector<bool> v;
...
auto highPriority = v[2];

这样会导致highPriority中含有一个空悬指针,调用它时出现未定义行为。

但是可以使用强制类型转换在初始化语句中使用 auto

auto highPriority = static_cast<bool>v[2];

这样看起来比下面的语句更方便理解:

bool highPriority = v[2];