【问题标题】:std vector.data return void [duplicate]标准向量.数据返回无效[重复]
【发布时间】:2022-02-17 23:50:17
【问题描述】:

由于我无法理解的非常奇怪的行为,我需要您的帮助。

我写了一个vector.data的简单用法:

    void* ptr = NULL; // really initialized somewhere else
    bool* boolPtr = NULL;
    boolPtr = ((std::vector<bool>*)ptr)->data();

当我编译时(使用 -std=c++17)我得到了错误

void value not ignored as it ought to be

我尝试了很多东西,但似乎每次我从一个强制转换的向量(来自 void*)调用时,data() 方法都会返回一个 void 而不是 bool*。

我错过了什么?

【问题讨论】:

  • A vector&lt;bool&gt; 是一种特殊类型的向量,没有 API 可以获取底层缓冲区。
  • 无论何时你在 C++ 中进行 C 风格的强制转换(就像你对 (std::vector&lt;bool&gt;*)ptr 所做的那样),你都应该把它当作你在做某事错误的标志! A向量等同于数组,除了一些向量操作模仿数组的操作。更糟糕的是,std::vector&lt;bool&gt; 是一个不同于其他任何std::vector专业
  • 此外,程序员试图解决此类问题的方法是将那行代码分解为多个语句。 ((std::vector&lt;bool&gt;*)ptr)-&gt;data(); -- 演员是问题吗?是打电话给data() 吗?你不知道,因为你在一条线上做多件事。您应该做的是进行强制转换并将其分配给一个变量——查看编译器是否针对该行发出警告/错误。然后获取该变量并使用它来调用data() 等。我看到太多的程序员在一行中试图找出问题所在。
  • @PaulMcKenzie 总体来说很好的建议。不幸的是,这不仅仅适用于 C 风格转换的任何情况,因为它告诉编译器“放手,我知道我在做什么!”即使那不是真的(就像这里的情况)。

标签: c++ vector


【解决方案1】:

vector&lt;bool&gt; 不是正确的向量。听起来很奇怪,事情就是这样。它不能给你一个指向其内部 bool 数组的指针,因为它没有一个指针,因为它将值存储在单个位中。

【讨论】:

  • 天哪,谢谢你的帮助,我会尝试使用 comme 经典类型的 :)
  • 显然它适用于其他原始类型...
猜你喜欢
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多