C++ 向量<;布尔>;在const data()方法上引发错误
我有以下代码:C++ 向量<;布尔>;在const data()方法上引发错误,c++,vector,C++,Vector,我有以下代码: #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 wo
#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);
}
#包括
结构测试结构{
std::向量浮点向量;
std::矢量布尔向量;
};
void func(常量TestStruct&test)
{
const float*p1=test.float_vect.data();/向量
是一个很好的旧向量
的特化,它的实现可能不同于普通的向量
(例如,可以采用一些节省空间的优化)。这种设计的副作用是它并不总是像普通的向量
(许多人认为<代码>向量< /代码>会被破坏)。
例如,处的引用没有提到vector::data()
一点也不。因此,在使用vector
类型bool
时,不应该使用它。事实上,在您的情况下,您不会得到类似方法未找到的错误,这只是编译器如何实现vector
的问题。std::vector
是STL中的classstd::vector
。为了使用更少的内存,布尔值在一个字节中存储为8。这意味着没有可访问的直接数据,因为该类的存储方式与其他类型不同
看看下面的例子:
专业化与非专业化向量具有相同的成员函数,但此专业化中不存在的数据、emplace和emplace_back除外
我认为标准根本没有规定有任何std::vector::data()
成员函数。我从来没有仔细看过它,但说[…]std::vector可能是std::vector对bool类型的一种节省空间的专门化。[…]
和[…]std::vector节省空间的方式(以及是否对其进行了优化)是实现定义的。[…]
因此data()
的内存布局未知。我没有看到data
方法可用于。的可能重复