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/