-
说明
-
vector<bool> -
vector<bool>实现-
说明
- 单独实现类这个模板.
-
vector<bool>实现// CLASS vector<bool> template <class _Alloc> class vector<bool, _Alloc> : public _Vb_val<_Alloc>- 单独实现了这个模板类。
-
下标运算符
[]_NODISCARD _CONSTEXPR20_CONTAINER const_reference operator[](size_type _Off) const noexcept /* strengthened */ { #if _CONTAINER_DEBUG_LEVEL > 0 _STL_VERIFY(_Off < this->_Mysize, "vector<bool> subscript out of range"); #endif // _CONTAINER_DEBUG_LEVEL > 0 const_iterator _It = begin(); _It._Advance(_Off); return *_It; } _NODISCARD _CONSTEXPR20_CONTAINER reference operator[](size_type _Off) noexcept /* strengthened */ { #if _CONTAINER_DEBUG_LEVEL > 0 _STL_VERIFY(_Off < this->_Mysize, "vector<bool> subscript out of range"); #endif // _CONTAINER_DEBUG_LEVEL > 0 iterator _It = begin(); _It._Advance(_Off); return *_It; } -
返回的类型声明
template <class _Alvbase_wrapped> class _Vb_reference : public _Vb_iter_base<_Alvbase_wrapped> using reference = _Vb_reference<_Alvbase_wrapped>;- 模板类型
-
bool运算符重载_CONSTEXPR20_CONTAINER operator bool() const noexcept { return (*_Getptr() & _Mask()) != 0; } -
代理类
- 这类代理类还是挺多的.
- 通过包装的方式行为特别像某一个类.
- 但是有个问题就是
auto不识别. - 所以在这种情况下需要用显式声明或者是
static_cast,这种就有点脱裤子放屁的感觉了.
-
-
缺点
auto的问题
最新推荐文章于 2023-06-03 18:32:51 发布
本文探讨了C++标准库中`vector<bool>`的特殊实现,指出其内部编译的隐式类型可能导致的问题。`vector<bool>`的元素实际上是代理类,而非直接的bool类型,这可能导致在某些操作中需要显式转换。文章通过案例展示了编译失败的情况,并解释了`vector<bool>`的下标运算符返回的是代理类引用,而不是bool。作者建议在遇到此类问题时使用显式类型转换以避免潜在错误,并提及了C++11和C++14在此方面的改进。
6422

被折叠的 条评论
为什么被折叠?



