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];