我可以在C++获得非特化的载体<bool>类型吗?

Can I get an unspecialized vector<bool> type in C++?

本文关键字:bool lt gt 类型 C++ 非特 我可以      更新时间:2023-10-16

vector<bool>专门用于减少空间消耗(每个元素 1 位),但它的访问速度比 vector<char> 慢。有时我出于性能原因使用vector<char>,但是如果我将char转换为bool,我的编译器(Visual C++)可能会生成我不喜欢的C4800警告。

另外,我认为如果我将其视为非专业vector<bool>,则该vector<char>在语义上是错误的。那么,我可以在C++中获得真正的非专业vector<bool>类型吗?

不,你不能得到一个不专业的std::vector<bool>.

vector<char>是你最好的选择,因为你已经弄清楚了。要绕过警告,只需使用 bool 表达式:

bool b1 = v[0] != 0;
bool b2 = !!v[0];

或者,创建自定义布尔类:

class Bool
{
public:
  Bool(){}
  Bool(const bool& val) : val_(val) {}
  inline Bool& operator=(const bool& val) { val_ = val; }
  operator bool() const { return val_; }
private:
  bool val_;
};

 vector<Bool> bvec;
 bvec.push_back(false);
 bvec.push_back(true);
 bool bf = bvec[0];
 bool bt = bvec[1];