如果我想要一个指向 int 向量向量中的元素的指针,我会写:
vector<vector<int>> a (5);
int* p1 = a[4].data();
但是,当我编写以下内容时,它不适用于 bool 向量的向量(为什么?):
vector<vector<bool>> b(5);
bool* p2 = b[4].data();
编译器输出以下错误消息:
Semantic issue: Error: Cannot initialize a variable of type "bool*" with an rvalue of type "void".
std::vector<bool>
不幸的是,这是一种专门化,可以通过为每个元素仅使用一点来节省空间。这不能保证,但有可能发生。
当这种情况发生时,意味着不可能使用指向元素的指针(C++ 中对象的最小大小是一个字节),并且还有许多其他细节std::vector
不为std::vector<bool>
.
只是不要使用它......如果您需要位打包,请自己实现它(至少您知道以可移植的方式获得什么),如果您不关心位与字节的保存,只需使用std::vector<unsigned char>
相反(这是一个真正的std::vector
).
std::vector<bool>
专业化基本上是 C++ 的一个错误,它没有任何意义的用途。不提供任何保证优势并可能在将来产生问题(例如,即使对于当前不需要适当的标准迭代器的代码,也可能是代码需要演变为需要它们,并且如果您使用vector<bool>
那么你就注定了)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)