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

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

最佳答案

不,您无法获得未特化的std::vector<bool>

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

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

或者,创建一个自定义的bool类:
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];

关于c++ - 我可以在C++中获得非专业的vector <bool>类型吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27883840/

10-17 00:31