Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量<;布尔>;在const data()方法上引发错误_C++_Vector - Fatal编程技术网

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中的class
std::vector
。为了使用更少的内存,布尔值在一个字节中存储为8。这意味着没有可访问的直接数据,因为该类的存储方式与其他类型不同

看看下面的例子:

专业化与非专业化向量具有相同的成员函数,但此专业化中不存在的数据、emplace和emplace_back除外


我认为标准根本没有规定有任何
std::vector::data()
成员函数。我从来没有仔细看过它,但说
[…]std::vector可能是std::vector对bool类型的一种节省空间的专门化。[…]
[…]std::vector节省空间的方式(以及是否对其进行了优化)是实现定义的。[…]
因此
data()
的内存布局未知。我没有看到
data
方法可用于。的可能重复