我有以下代码:
#include <vector>
struct TestStruct {
std::vector<float> float_vect;
std::vector<bool> bool_vect;
};
void func(const TestStruct & test)
{
const float * p1 = test.float_vect.data(); //<--- this line works fine
const bool * p2 = test.bool_vect.data(); //<--- on this line error happens
}
int main()
{
TestStruct test;
func(test);
}
错误消息:
passing 'const std::vector' as 'this' argument of 'void std::vector::data() [with _Alloc = std::allocator]' discards qualifiers [-fpermissive]
std::vector 的 data()
方法指定了 const
。
为什么此方法在浮点 vector 上工作正常,但在 bool vector 上引发错误?
最佳答案
vector<bool>
是一个好老的专精vector<T>
并且其实现方式可能与普通vector
不同(例如,可以采用一些节省空间的优化)。这种设计的副作用是它并不总是表现得像普通的那样vector
(许多人认为 vector<bool>
因此而被破坏)。
例如,http://en.cppreference.com/w/cpp/container/vector_bool 处的引用没有提到vector<bool>::data()
根本不。因此 - 在使用 vector
时不应使用它类型 bool
。事实上,您不会收到类似于 method not found
的错误是 - 在你的情况下 - 只是如何vector<bool>
的问题由您的编译器实现。
关于c++ - vector<bool> 在 const data() 方法上引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487039/