从空 std::vector 获取原始数据指针

Get raw data pointer from empty std::vector

这是一个未定义的行为:

std::vector<int> v;
int const * a = &v[0];

我的目标是避免 UB 并且 vector::data() 函数可以工作。但是我需要在没有 >=C++11.

的情况下进行

例如,如果我用 vector::reserve 分配一些内存,它会起作用吗?

v.reserve(1);
int const * a = &v[0];

澄清:

我取指针后向量没有变化,向量可能为空或包含数据。

向量不对其元素的指针提供任何保证。使用您所做的储备是非常危险的,因为稍后您可能 push_back() 一些元素,这可能会使您的指针无效。

如果你想要一个更好的故事,请考虑甚至迭代器也可能因 push_back and erase 而失效...为什么指针仍然有效?

只需在条件运算符内执行检查:

int const * a = v.empty() ? NULL : &v[0];

这比 data() 有额外的好处,您可以从指针本身检查向量是否为空:如果是,a 为空。