常量指针的向量?

Agr*_*hak 7 c++ pointers const vector

以下不编译(非常详细的错误,但基本上"不能重载"和"从'const void*'无效转换为'void*'").我可以理解为什么例如push_back()可能无法编译,因为你无法复制/移入a Foo* const,但为什么不编译:

#include <vector>
using namespace std;

class Foo;

int main()
{
  vector<Foo* const> vec;
}
Run Code Online (Sandbox Code Playgroud)

vso*_*tco 11

向量可能是唯一需要元素可复制分配的容器.这是因为保证元素在存储器中连续存储.因此,如果超出容量,则必须分配新块并重新分配元素.你不能用const元素来做这件事.

如果你尝试std::vector<const int>,或实际上任何const类型,同样的错误.

  • 为什么重新分配需要赋值?听起来更像是它需要可复制性...... (2认同)

Net*_*peC 5

您正在声明一个包含constFoo 指针的向量,这意味着该指针无法修改。当你在向量中插入一个元素时,需要写入a const pointer(无效)。

您确定它不是:std::vector<Foo const *> vec;其中 Foo 不会被指针修改。