我可以在 C++ 中获得非专用 vector<bool> 类型吗?

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

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

此外,如果我将 vector<char> 视为未专门化的 vector<bool>,我认为它在语义上是错误的。那么,我可以在 C++ 中获得一个真正的非专用 vector<bool> 类型吗?

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

正如您已经发现的,

vector<char> 是您最好的选择。要绕过警告,只需使用 bool 表达式:

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

或者,创建自定义布尔值 class:

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